物理シミュレーションにはBox2dWebを用いてます。
PhySprite.enchant.jsのダウンロード
ダウンロード
リファレンス
github
またBox2dWebのサイトから「Box2dWeb-○○○.js」の最新版をダウンロードして、「PhySprite.enchant.js」と同じフォルダに入れてください。
使い方
・プラグインの読み込み
index.htmlでenchant.jsの後に以下のファイルを読み込んでください
・Box2DWeb-○○○.js
・PhySprite.enchant.js
<script type="text/javascript" src="enchant.js"></script> <!-- プラグイン読み込み --> <script type="text/javascript" src="Box2dWeb-2.1.a.3.js"></script> <script type="text/javascript" src="PhySprite.enchant.js"></script>
・ワールド生成
//物理シミュレーションの世界を設定(y軸方向に重力 9.8[m/s^2]) physicsWorld = new PhysicsWorld(0, 9.8);
・物理シミュレーション用Spriteの生成
//ボール生成 var phyBall = new PhyCircleSprite(8, DYNAMIC_SPRITE, 1.0, 0.5, 0.2, true); phyBall.image = game.assets["icon1.png"]; phyBall.position = { x: 160, y: 10 }; game.rootScene.addChild(phyBall); // シーンに追加 //床生成 var floor = new PhyBoxSprite(256, 16, STATIC_SPRITE, 1.0, 0.5, 0.3, true); floor.image = game.assets["floor.gif"]; floor.position = { x: 160, y: 300 }; game.rootScene.addChild(floor);
・毎フレームの処理
//毎フレーム処理 game.rootScene.addEventListener(enchant.Event.ENTER_FRAME, function (e) { physicsWorld.step(game.fps); //物理シミュレーション内の時間を進める });
PhyCircleSpriteは円、PhyBoxSpriteは四角の物理シミュレーションSpriteです
enchant.Spriteを継承しています
生成時の引数は
PhyBoxSprite(width, height, staticOrDynamic, density, friction, restitution, isSleeping); PhyCircleSprite(radius, staticOrDynamic, density, friction, restitution, isSleeping);
引数の説明
width:Spriteの横幅.
height:Spriteの高さ.
radius:Spriteの半径.
staticOrDynamic:静止物体か動体か。STATIC_SPRITEの時、動かない物体。DYNAMIC_SPRITEの時、動く物体
density:Spriteの密度.
friction:Spriteの摩擦.
restitution:Spriteの反発.
isSleeping:Spriteが初めから物理演算を行うか.
では、サンプルプログラム1
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, user-scalable=no"> <meta name="apple-mobile-web-app-capable" content="yes"> <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent"> <title>PhySprite demo</title> <script type="text/javascript" src="enchant.js"></script> <!-- プラグイン読み込み --> <script type="text/javascript" src="Box2dWeb-2.1.a.3.js"></script> <script type="text/javascript" src="PhySprite.enchant.js"></script> <script type="text/javascript"> enchant(); window.onload = function () { var game = new Game(320, 320); game.fps = 24; game.preload("icon1.png", "floor.gif"); game.rootScene.backgroundColor = "black"; game.onload = function () { //物理シミュレーションの世界を設定(y軸方向に重力 9.8[m/s^2]) var physicsWorld = new PhysicsWorld(0, 9.8); //ボール生成 var phyBall = new PhyCircleSprite(8, DYNAMIC_SPRITE, 1.0, 0.5, 0.2, true); phyBall.image = game.assets["icon1.png"]; phyBall.position = { x: 160, y: 10 }; game.rootScene.addChild(phyBall); // シーンに追加 //床生成 var floor = new PhyBoxSprite(256, 16, STATIC_SPRITE, 1.0, 0.5, 0.3, true); floor.image = game.assets["floor.gif"]; floor.position = { x: 160, y: 300 }; game.rootScene.addChild(floor); game.rootScene.addEventListener(enchant.Event.ENTER_FRAME, function (e) { physicsWorld.step(game.fps); //物理シミュレーション内の時間を進める }); }; game.start(); // ゲームスタート } </script> <style type="text/css"> body { margin: 0px; } </style> </head> <body> </body> </html>
PhySprite.enchant.jsのサンプル2
リファレンス
こちらのページ(http://9leap.net/games/2255)来たものです.質問なのですが,私もenchant.jsでゲームを作っているところ,firefoxがよく落ちてしまうようで,原因をずっと探してきたところです.kassy708さんはどうやってその問題を解決したか,教えていただけないでしょうか.(このページと関係ない質問ですみません)
返信削除>ぱきさん
削除PhySprite.enchant.jsとは別にメモリリークして落ちるということですね。
私の場合はクロージャが原因のメモリリークが発生していました。
あまり私も理解できているわけではないので、「クロージャー, 循環参照」などで調べるといろいろと出てきますので、そこを参考にしてみてください。
的外れでしたらすみません(^_^;)
返信有難う御座います.
削除なるほど,クロージャでしたか.確かに使ってた覚えがあります.
というか,クロージャって何?状態なので,いろいろ調べる必要がありそうですね.丁寧な解答をありがとうございました.