Share
Embed
Transcript
28 slides
-
Matter.js Matter.jsでつくる「ぷにゃっ」と動く物理演算Webエフェクトとパフォーマンス改善 ・"lightweight, optional utility which provides a simple canvas
based renderer" (軽量でオプショナルなユーティリティとして、シンプルなCanvasベースのレンダラー) ・ “An original JavaScript physics implementation (not a port)” ・Box2DなどのC/C++エンジンの移植/ラッパーではない(依存が無い) ・ブラウザ上で動作する2Dの物理エンジンとして比較的手軽に導入 できるライブラリ https://brm.io/matter-js/docs/classes/Render.html https://github.com/liabru/matter-js/blob/master/README.md -
Events Matter.jsでつくる「ぷにゃっ」と動く物理演算Webエフェクトとパフォーマンス改善 → 物理エンジンで起きる出来事(衝突、更新など)を「イ ベント」として受け取れる。 https://brm.io/matter-js/docs/classes/Engine.html#events 受け取れるイベントの形式 Events.on(Engine, "afterUpdate", callback)
Events.on(Engine, "beforeSolve", callback) Events.on(Engine, "beforeUpdate", callback) Events.on(Engine, "collisionActive", callback) Events.on(Engine, "collisionEnd", callback) Events.on(Engine, "collisionStart", callback) -
Eventsを用いた衝突速度の推定 Matter.jsでつくる「ぷにゃっ」と動く物理演算Webエフェクトとパフォーマンス改善 ・各オブジェクトはvelocityというパラメータを持っている velocity・・・ボディが1フレーム(一回の計算)で移動する量を示す t=0: body(x=0, y=0) t=1: body(x=6, y=-8)
velocity = { x: 6, y: -8 } y軸 x軸 ※移動方向が決まれば衝突方向もわかりそうだが結局どこがぶつかったかがわからない →ピタゴラスの定理により速度が推定できる -
Matter.jsでつくる「ぷにゃっ」と動く物理演算Webエフェクトとパフォーマンス改善 描画への反映 Matter.js → 物理計算(位置、速度、衝突) JavaScript → 計算結果からCSSへの適用(イベント駆動) CSS →
描画とアニメーション 衝突方向(event.normal) どれくらいの速度でぶつかったか (body.velocity) 例 定数(ぷにゃっとさせ具合) -
Matter.jsでつくる「ぷにゃっ」と動く物理演算Webエフェクトとパフォーマンス改善 1.最大オブジェクト数 /FPSの制限 パフォーマンス面 物理演算で使用するオブジェクト数を一定に保つ →配列の先頭削除(shift)で古いエフェクトから削除( FIFO) FPS(1秒間に何回計算するか)の指定もできる →用途に応じた適切な FPSを指定
https://brm.io/matter-js/docs/classes/Runner.html -
Matter.jsでつくる「ぷにゃっ」と動く物理演算Webエフェクトとパフォーマンス改善 3.クリーンアップ パフォーマンス面 イベントリスナー の管理 ・多くのイベントを扱う ・addEventListener → removeEventListener ・ライフサイクルに応じたクリーンアップ
物理オブジェクト の削除 ・world.push() → world.splice() ・削除しないと非表示のボディが物理演算の対象に残る →気づきにくい