![見出し画像](https://assets.st-note.com/production/uploads/images/111327344/rectangle_large_type_2_8ad0f7daa8e30dcd7d17843a3bbdca7d.jpeg?width=1200)
【進捗01】ボールの物理挙動を使ったゲームの進捗
りんご飴と申します。りんご飴は食べられません
ここ3日間程度、作ってみたいゲームの基盤ができましたので、初の進捗報告として記事を書き込んでいこうと思います
使っているツール、ライブラリ
・Microsoft Visual Studio 2022
・DXライブラリ
・Bandicam、 Microsoft Clipchamp(スクショ、gif変換用)
作っているもの
早速ではありますが、こちらをご覧ください
![](https://assets.st-note.com/img/1689909865630-H5t1FFABrx.jpg?width=1200)
う、うーーーん
スクショだけだと伝わりにくいと思いますが、マ○オやドラ○もんのおもちゃにある『大迷路』をイメージしたものになります
(大元は立体的なおもちゃですが、こちらは2Dですし技量の問題でギミックも単調です・・・)
作って何がしたいの?
今回のゲームは、「灰色のボックスを動かして、ボールを弾いてゴールに持っていこう」みたいなコンセプトで制作しています
ですが、正直なところ、コンセプトは後付けだったりします
このゲームは、『物理的なボールの挙動を理解する』という目的の元に存在しています
なので、ぶっちゃけゲームルールやコンセプトはおまけに近いです
「ボールの挙動」については後の小見出しで記述します
ゲーム内容
実際に動かすとこのようになります
![](https://assets.st-note.com/production/uploads/images/111323189/picture_pc_a802e012d6b7c14eae596598dd250c60.gif)
・・・まだ試作段階なので、お粗末な作りと感じたらすみません。というか、その通りです;;
操作方法としては、十字キーの右、左で灰色のボックスを動かすことができます
灰色のボックスは各々動く速度は違えど、キー入力されれば全て共通に動きます
スペースキーを押すと、ボールやボックスの位置をリセットできます
一応3ステージ程度用意するので、現在のステージをリセットさせるようにする予定です
まだ最初のステージですら製作途中ですので、ゴールを設けていませんが、ボールをゴール(韻を踏んでいる)に入れたら次のステージに進める、という仕様にします
ボールの挙動について
先程のgifを見ていただければ分かると思いますが、今回のボールは「弾力があるボール」をイメージしています
言い換えるとスーパーボールです、ポ◯モンのことではない
今回ボールに実装した物理要素は以下の2つです
・ボールが落ちた時のバウンド
・ボックスに当たった時の跳ね返り
ボールが落ちた時のバウンド
弾力がある球、特にスーパーボールなんかは、高いところから落ちると一定の高さまで跳ね返ってきますよね
前述した通り、スーパーボールをイメージしていますので、ボールの挙動にバウンドを実装しています
![](https://assets.st-note.com/production/uploads/images/111324576/picture_pc_ca4d0433673ba09be2269adf78137f6c.gif)
現在制作しているゲームのバウンドを、そのまま持ってきたものです
Y = 50 からボールを落としています
跳ね返りの仕組みについては、恐らくここを見に来ている人ならば知っていると思いますので、メモ書き程度に置いておきます・・・
まずバウンドを実装する上で、重力が無ければバウンドは作れません
重力がなければその場に停止していまいますからね、重力の概念を発見したニュートン(とケプラー)に感謝しなければ
重力は 0.2 にしています(毎フレームYのベロシティ(velY)を 0.2 増やし、現在のY座標(posY)に velY を加算している)
画面枠(下の白いやつ)にAABBで当たり判定を設け、枠の上に当たったら velY に -0.55 を掛けています(掛ける値の絶対値は大きければ大きいほど跳ね返りが強くなります※ 0 > n > -1 の範囲内)
文字にすると単純じゃないですけど、かなり単純な仕組みでリアリティあるバウンドが実装できます
ボックスに当たった時の跳ね返り
画面枠に当たった時、ボールを跳返るようにしています
![](https://assets.st-note.com/production/uploads/images/111326614/picture_pc_981171ee30ec7b211209816032c0687f.gif)
Xには重力が掛からないので、灰色のボックスを動かしてボールを弾いた時にXのベロシティ(velX)をボックスの速さから引っ張ってきています
こちらは画面枠にAABBで当たり判定を設け、枠に当たったら velX に - 0.55 を掛けています(掛ける値の絶対値は(ry
このgifでは仮に velX = -10, velY = 4 に、動画速度を 0.7倍にしています
跳ね返りの際、絶対値は 0.5 ~ 0.8 辺りがスーパーボールらしい跳ね返りになるので良いかな~と思ってます
おわりに
いかがでしたか?初めての進捗報告ですので、noteの記事として拙い部分も多かったと思います
「りんご飴ってやつはこんなことしてるんだな~」と思っていただければ幸いです
今後の予定としては、「他ステージの実装、及びステージの切り替え」「ボールをジャンプさせるギミック」を実装させる予定です
それでは、また