Box2d-Jquery を使用して簡単なゲームを作成しています。デフォルトでは、DOM 要素の位置は、対応する要素をクリックしてドラッグすることで処理できます。要素の動きがマウス クリックによって妨げられないように、このマウス イベントを無効にするにはどうすればよいですか? 前もって感謝します。
2 に答える
メソッド本体にコメントしていただけませんか
updateMouseDrag = function() {
/*var body, md;
if (isMouseDown && (!mouseJoint)) {
body = getBodyAtMouse();
if (body) {
md = new b2MouseJointDef();
md.bodyA = world.GetGroundBody();
md.bodyB = body;
md.target.Set(mouseX, mouseY);
md.collideConnected = true;
md.maxForce = 300.0 * body.GetMass();
mouseJoint = world.CreateJoint(md);
body.SetAwake(true);
}
}
if (mouseJoint) {
if (isMouseDown) {
return mouseJoint.SetTarget(new b2Vec2(mouseX, mouseY));
} else {
world.DestroyJoint(mouseJoint);
return mouseJoint = null;
}
}*/
};
このメソッドは、box2dでサポートされているマウスジョイントを作成し、世界中のボディでマウスイベントを処理します。
または、メソッドupdate()のupdateMouseDrag()への呼び出しにコメントを付けます。update()はゲームループメソッドです。
これは一種の古い質問ですが、今夜私はそれを理解しました:
Box2D Jquery は DOM アクセス可能なユーザー データを設定しないため、いくつか設定する必要があります。
$('element').box2d で、オプション 'mouseEnabled' を true/false に設定します。
次に、
$.fn.extend({
box2d: function(options) {
オプションを追加します。
mouseEnabled = opts['mouseEnabled'];
userData = {
mouseEnabled:mouseEnabled,
//Add additional options here
}
その下で、次の行を見つけます
createDOMObjects(absolute_elements, shape, static_, density, restitution, friction);
引数に userData を追加して、次のようにします。
createDOMObjects(absolute_elements, shape, static_, density, restitution, friction, userData);
次
createDOMObjects を見つけて、userData を引数に追加します。
createDOMObjects = function(jquery_selector, shape, static_, density, restitution, friction, userData) {
各ボディの b2BodyDefinitions に userData を追加する必要があります。したがって、userData を createBox と createCircle に追加します。2 つの作成関数内で、次のように userData を BodyDef に適用します。
getBodyAtMouse(); で本体をログアウトした場合は、正しく行った場合。m_userData が null ではなくなっていることがわかります。
最後に、updateMouseDrag に、mouseEnabled の userData が false であるという戻り値を追加します。
if (body) {
console.log(body.m_userData)
if(body.m_userData.mouseEnabled == false){return;}
md = new b2MouseJointDef();
md.bodyA = world.GetGroundBody();
md.bodyB = body;
md.target.Set(mouseX, mouseY);
md.collideConnected = true;
md.maxForce = 300.0 * body.GetMass();
mouseJoint = world.CreateJoint(md);
body.SetAwake(true);
}
出来上がり!これで、box2D 要素をインスタンス化する場所に、mouseEnabled を追加するだけです!
$(".block").box2d({'y-velocity':10, 'mouseEnabled':false});
ランタイム中に mouseEnable を変更したい場合は、 body.m_userData.mouseEnabled を何かに設定するだけです!