はじめる! Box2DJS 第5章 ゲームを作成する
また1週間たってしまいました。今日は第5章の実際にアプリケーション(ゲーム)を作ってみるところです。さくさくいきます。
- b2Body の userData プロパティに物体が何かを示す文字列を格納しておく
- m_bodyList でイテレーションする時に userData を元に処理を分岐する
- userData に関数を格納しておいて処理をそこに書くというのもOK(そのほうがいいと思うけど本章のサンプルでは前者の方法を採用)
- MouseJoint を使ってマウス操作を検出
- マウスボタン押下
- 移動
- マウスボタンリリース
- body2 プロパティに操作対象の物体を格納
- ゴムで繋がれたように target(通常マウスポインタの位置)に引き寄せる力がはたらく
- 衝突処理
- b2Body には衝突時のコールバックはない
- b2World の b2Contact クラスのオブジェクトを監視する。物体が衝突しそうになると b2Contact のインスタンスが b2World に生成される(b2World.getContactList() で取得)
- b2Contact オブジェクトが生成されるのは AABB が交差した時なので、実際に衝突しているかは GetManifoldCount メソッドで確認する
- 物体の破壊はできないので衝突時に目標を削除(DestroyBody)して、破片のオブジェクトを生成するようにする
- 衝突判定する物体を制御する
- b2Shape の m_groupIndex, m_categoryBits, m_maskBits といったプロパティで物体(の基本図形)をグループ分けして、相互作用するオブジェクトを指定します
- m_groupIndex が同じなら衝突する
- m_groupIndex が異なっても m_categoryBits と m_maskBits に重なりがあれば衝突する
- 本文の説明を読むと「衝突する物体」と「衝突される物体」に区別があるようなのですが、どう分けるのでしょう。
- 画像を描画する
- 描画方法は Box2DJS の機能外ですがいくつかサンプルが載っています
油断していたら「はじめる! Box2DJS」は第5章で終わりでした。手元の「はじめる!」シリーズは読み終えたので、今度は FPGA 本にするか LLVM 本にするか……。