こんばんは。
あいも変わらず広く浅く技術つまみ食いをしています。
最近はenchant.jsに物理エンジンBox2dWebをぶっこんで
動かすことにハマっとります。
↓を参考にしつつ。
【enchant.js】Hello Physical World vol.1【box2d】 - 416番地
↓を聞きながらちんたらちんたらと。
ザ・シネマハスラー 「この空の花-長岡花火物語」 オススメです! - YouTube
いやー、宇多丸さんは本当に映画詳しいし、
何よりあ、これ見ようという気にさせますよね!ね!
特にこの、この空の花のレビューは秀逸で、
大林監督作品のカルト臭い映画を実際に
見てみたくなりますもんね!ね!まだ見てないけどね!
で、box2d.enchant.js で Box2d の距離ジョイント(でいいのかな?)を使用するコードが
探してもあんまり無かったように思うんで晒しておきます。
すみません、テキトーに組んでいるので
メモリリークとか有り得なくないと思いますので
その辺はご了承ください。。。
index.html
<html>
<head>
<title>JOINT</title>
<script type="text/javascript" src="../lib/enchant.js"></script>
<script type="text/javascript" src="../lib/Box2dWeb-2.1.a.3.js"></script>
<script type="text/javascript" src="../lib/box2d.enchant.js"></script>
<script type="text/javascript" src="main.js"></script>
</head>
<body>
<br><br><br><br><br>
<div id="enchant-stage"></div>
<br><br><br><br><br>
</body>
</html>
main.js
var WINDOW_WIDTH = 320;
var WINDOW_HEIGHT = 320;
enchant();
window.onload = function(){
var core = enchant.Core( WINDOW_WIDTH, WINDOW_HEIGHT );
core.onload = function(){
//物理世界を作成
var _world = new PhysicsWorld( 0.0, 9.8 );
//オブジェクトA
objA = new PhyBoxSprite( 10, 10, enchant.box2d.STATIC_SPRITE,
1.0, 0.5, 0.8, true );
objA.image = new Surface( 10, 10 );
objA.image.context.strokeRect( 0, 0, 10, 10 );
objA.position = { x:160, y:100 };
core.rootScene.addChild( objA );
//オブジェクトB
objB = new PhyBoxSprite( 10, 10, enchant.box2d.DYNAMIC_SPRITE,
1.0, 0.5, 0.8, true );
objB.image = new Surface( 10, 10 );
objB.image.context.strokeRect( 0, 0, 10, 10 );
objB.position = { x:200, y:200 };
core.rootScene.addChild( objB );
//距離ジョイント
var jointDef = new Box2D.Dynamics.Joints.b2DistanceJointDef();
jointDef.Initialize( objA.body.m_body,
objB.body.m_body,
objA.body.m_body.GetWorldCenter(),
objB.body.m_body.GetWorldCenter()
);
joint = _world.CreateJoint( jointDef );
//世界を動かす
core.rootScene.onenterframe = function(e){
_world.step( core.fps );
};
};
core.start();
};
んで、box2d.enchant.jsのクラスにメソッドを追加します。
box2d.enchant.js
//PhysicsWorldクラス
enchant.box2d.PhysicsWorld = enchant.Class.create({
//中略
//CreateJoint関数を追加。
CreateJoint: function( jointDef ){
world.CreateJoint( jointDef );
}
});
を追加。
これでぷらぷらぷらーんと動く。はず。(^^;
ちなみにjavascriptとかhtmlは最近触り出したので、
なんかおかしいとこがあるかも知れませんが許してください。。
以上です。