Skip to content

2D 物理演算を行う

2D 物理演算を行うには akashic-box2d を利用します。

凡例

javascript
// 物理エンジン世界の生成
var box2d = new b2.Box2D({
  gravity: [0, 9.8],
  scale: 50,
  sleep: true
});

// 矩形エンティティの生成
var rect1 = new g.FilledRect({
  scene: scene,
  cssColor: "red",
  x: 100,
  y: 100,
  width: 50,
  height: 50
});
scene.append(rect1);

// エンティティの物理的性質を定義
var entityDef = box2d.createFixtureDef({
  density: 1.0,
  friction: 0.5,
  restitution: 0.3 // 反発係数
});

// 動的物体化
var dynamicDef = box2d.createBodyDef({
  type: b2.BodyType.Dynamic
});

// 物理エンジン世界における rect1 エンティティを四角に設定
entityDef.shape = box2d.createRectShape(rect1.width, rect1.height);

// rect1 エンティティを物理エンジン世界に追加
box2d.createBody(rect1, dynamicDef, entityDef);

scene.onUpdate.add(function () {
  // 物理エンジンの世界の時間をすすめる
  box2d.step(1 / g.game.fps);
});

利用例

次のコンテンツは、固定された床の上に矩形を落下させます。

詳細

akashic-box2d を使うことで 2D 物理演算を利用したコンテンツを作成することができます。

akashic-box2d は、地面などの固定された静体や物理法則に従って動かせる動体、円や矩形・多角形などの物理演算における形状の定義、それらの接触開始・終了イベントの取得、加速度を与えることなどの機能を提供します。

これらは 2D 物理演算ライブラリである Box2DWeb が提供する機能であり、akashic-box2d は名前の通り Box2DWeb を Akashic で利用するためのモジュールです。 akashic-box2d は Akashic と Box2DWeb の紐づけと、利用に便利な一部機能を提供しています。そのため、多くの機能は Box2DWeb のインターフェースに従って利用することになります。

akashic-box2d のインストールは game.json が置かれているディレクトリで以下のコマンドを実行してください。

sh
akashic install @akashic-extension/akashic-box2d

それぞれの形状や物理性質の利用方法は、 akashic-box2d のサンプル を参照してください。

関連情報