1

Box2d-Jquery を使用して簡単なゲームを作成しています。デフォルトでは、DOM 要素の位置は、対応する要素をクリックしてドラッグすることで処理できます。要素の動きがマウス クリックによって妨げられないように、このマウス イベントを無効にするにはどうすればよいですか? 前もって感謝します。

4

2 に答える 2

1

メソッド本体にコメントしていただけませんか

  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()はゲームループメソッドです。

于 2012-12-19T11:02:10.620 に答える
1

これは一種の古い質問ですが、今夜私はそれを理解しました:

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 を何かに設定するだけです!

于 2013-03-11T15:50:05.310 に答える