👏

ブロック崩しpart1

2024/02/05に公開

Godot公式の2Dゲームを作り終えたのでブロック崩しゲームに着手

ボールから作っていく

・RigidBody2Dは物体に物理的な動きをさせるためのノードである
・動かない物体はStaticBodyノード
・CollisionShapeノードで物体の範囲を決める
・スクリプトで衝突を検知したいためRigidBodyのインスペクターでMax Contacts ReportedとContact Monitorをアクティブにしておく必要がある
・Reportedは一度にいくつの物体を接触するか決めるプロパティ
・Monitorは物体の接触を検知するか決めるプロパティ


・プロジェクト設定→2D物理Default Liner Dumpを0に。これは空気抵抗のこと
・やはり壁はStaticBody2Dだ。(静的物体のため)
・壁を複製したが個別に大きさを調整すると他の壁と同期してしまっている
そんなときに便利なのがユニーク化だ。これで上の壁を設定した。

パドル
・パドルの移動に_physics_process(delta)ではなく_integrate_forces(state)を使う
_physics_process(delta)はあまり使わないみたい。

・_integrate_forces(state):は要はGodotに備わった物理エンジンを使わずに自分で色々いじれちゃうよというような関数らしい。
・originは座標のpositionと考えてよいだろう
・初歩的なことだが引数は()でstateである。
・stateは物理的な状態やパラメーターを表すインタフェース

・キーマッピングしてもパドルが動かない、そこでstate.linear_velocity = Vector2.ZEROを追加
・linear_velocityは変数やプロパティでありベクトルを格納する。
・キーが押されていない状態を考えていなかったから動作しなかったのだと納得した。
・Vector2はだけで座標は完結するので便利なデータ型である。
・データ型をイマイチ理解していなかったので調べる。。難しい
・要はデータ型とはデータの種類やデータの形である
・2Dゲームで使った(int)整数、(String)文字列などがある。

・transformはノードの座標変換や変更のプロパティで回転やスケール変更もできるっぽい

・そういやstateとかoriginとかlinear_velocityって見慣れないと思ったけど_integrate_forces(state)メソッド固有のものらしい

次回はブロック作りから

Discussion