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) {

您现在需要将 userData 添加到每个主体的 b2BodyDefinitions 中。因此将 userData 附加到 createBox 和 createCircle。像这样在两个创建函数中将 userData 应用于 BodyDef:bodyDef.userData = userData;

如果你做对了,如果你在 getBodyAtMouse(); 上注销了 body;您会看到 m_userData 不再为空!

最后在 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 回答