以下の枠線内をタッチすることで、タッチした座標に赤い矩形を生成します。 生成された矩形は衝突判定と物理挙動を持っていて、重力に従って下へ移動していきます。
ダウンロードした zip ファイルを解凍して以下のコマンドを実行してください。
npm install
akashic-sandbox .
"use strict";
var box2d = require("@akashic-extension/akashic-box2d");
/** 物理世界のプロパティ */
var worldProperty = {
gravity: [0.0, 9.8], // 重力の方向(m/s^2)
scale: 50, // スケール(pixel/m)
sleep: true // 停止した物体を演算対象としないかどうか
};
/** 物理エンジンの世界 */
var physics = new box2d.Box2D(worldProperty);
/** 矩形の物理定義 */
var rectPhysics = {
/** 物理挙動 */
body: physics.createBodyDef({
type: box2d.BodyType.Dynamic // 自由に動ける物体
}),
/** 物理性質 */
fixture: physics.createFixtureDef({
density: 1.0, // 密度
friction: 0.5, // 摩擦係数
restitution: 0.3, // 反発係数
shape: physics.createRectShape(1.0 * worldProperty.scale, 1.0 * worldProperty.scale) // 衝突判定の形(1m × 1m の矩形)
})
};
function main() {
var scene = new g.Scene({ game: g.game });
scene.loaded.add(function() {
// タッチされた座標に重力に従う矩形を生成する
scene.pointDownCapture.add(function(event) {
// 表示用の矩形(1m × 1m)を生成
var box = new g.FilledRect({
scene: scene,
width: 1.0 * worldProperty.scale,
height: 1.0 * worldProperty.scale,
cssColor: "crimson"
});
box.x = event.point.x - box.width / 2;
box.y = event.point.y - box.height / 2;
scene.append(box);
// 矩形の物理実体を生成
physics.createBody(box, rectPhysics.body, rectPhysics.fixture);
});
scene.update.add(function() {
// 物理エンジンの世界をすすめる
// ※ step関数の引数は秒数なので、1フレーム分の時間(1.0 / g.game.fps)を指定する
physics.step(1.0 / g.game.fps);
});
});
g.game.pushScene(scene);
}
module.exports = main;
© DWANGO Co., Ltd.