ゲーム作成に興味があったので、物理演算エンジン、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); })();
ボールが落ちてくるようになりました。
バウンドさせたいときは、circleのオプションにあるrestitutionに任意の値を入れることで、バウンドさせることができます。
var boxA = Bodies.circle(375, 100, 50, { //バウンドさせたい場合はrestitutionに任意の値を渡す restitution: 0.9 }
アニメーションの動きなどを意識せずに「ボールを落とす」という動きを実装することができました。 他、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