はじめる! 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 本にするか……。