2012-12-19 55 views
1

我正在使用Box2d-Jquery編寫一個簡單的遊戲。默認情況下,可以通過單擊並拖動這些相應的元素來處理DOM元素的位置。如何禁用鼠標事件,以免鼠標點擊干擾元素的移動?提前致謝。Box2d-jquery:禁用鼠標事件

回答

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()是遊戲循環方法。

+0

非常感謝。工作就像一個魅力! – scarecrow

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

行並追加用戶數據的參數,以便它說:

createDOMObjects(absolute_elements, shape, static_, density, restitution, friction, userData); 

NEXT

查找createDOMObjects並追加到用戶數據的參數

createDOMObjects = function(jquery_selector, shape, static_, density, restitution, friction, userData) { 

現在,您將需要用戶數據添加到每個機構的b2BodyDefinitions。 因此將userData附加到createBox和createCircle。 像這樣在兩個創建函數中將userData應用於BodyDef: bodyDef.userData = userData;

如果你做得對,如果你註銷getBodyAtMouse();你會看到m_userData不再爲空!

最後 在updateMouseDrag中,添加一個返回是userData的mouseEnabled爲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); 
    } 

VOILA! 現在,無論您在何處檢測box2D元素,只需將mouseEnabled添加到它!

$(".block").box2d({'y-velocity':10, 'mouseEnabled':false}); 

如果您想在runTime期間更改mouseEnable,只需將body.m_userData.mouseEnabled設置爲任何值!