我正在使用 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) {
您现在需要将 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 设置为任何值!