2015/11/24

物理演算エンジン、Matter.jsを使ってみた。

物理演算エンジン、Matter.jsを使ってみた。

ゲーム作成に興味があったので、物理演算エンジン、Matter.jsを使ってみました。

Matter.js

Matter.jsは物理演算が必要なアニメーションやWebゲームを作りたいときに使えるJSのライブラリのようです。

インストール

まずは、本家サイトの手順(http://brm.io/matter-js/#usage) 通りに導入します。

<script src="matter.js" type="text/javascript"></script>

もしくは

bower install matter-js
npm install matter-js

ボールを落とす

実行に必要なデモコードを書きます。

<!-- index.html -->

<main id="stage"></main>

<script src="js/matter-0.8.0.min.js"></script>
<script src="js/app.js"></script>
## app.js
(function() {

var Engine = Matter.Engine;
var World = Matter.World;
var Bodies = Matter.Bodies;

// Matter.js エンジン作成
var engine = Engine.create(document.body);

// 二つの箱(四角)と地面を作る
var boxA = Bodies.rectangle(400, 200, 80, 80);
var boxB = Bodies.rectangle(450, 50, 80, 80);

// isStatic:静的(完全固定)
var ground = Bodies.rectangle(400, 610, 810, 60, { isStatic: true });

// 二つの箱(四角)と地面を追加
World.add(engine.world, [boxA, boxB, ground]);

// Matter.js エンジン起動
Engine.run(engine);

})();

ボールが落ちてくるようになりました。

2c0d0fcc308d3d847040b7e7cee562af.png

バウンドさせたいときは、circleのオプションにあるrestitutionに任意の値を入れることで、バウンドさせることができます。

var boxA = Bodies.circle(375, 100, 50, {
    //バウンドさせたい場合はrestitutionに任意の値を渡す
    restitution: 0.9
}

b9e451beee24553e77154976e8a441d2.png

アニメーションの動きなどを意識せずに「ボールを落とす」という動きを実装することができました。 他、Matter.Bodyクラス、Matter.Engineクラス、Matter.Renderクラス、Matter.Vectorクラス、Matter.Commonクラスにて必要なAPIが用意されています(http://brm.io/matter-js-docs/index.html) 。回転量、速さ、マウスイベントなどを使用して、もっと色んなことができそうです。

以下作っているサンプルです。随時、更新していきます。 https://github.com/yhikishima/MatterJs-dev

【参考】

他にも便利なAPIが多数用意されているようなので、underscore.jsなど使用する前に一度目的のapiがないかどうか調べてみても良いかもですね。