2011-06-04 50 views
2

最近我一直在推動我的JavaScript的知識,通過結合Processing.js和Box2D.js庫,使一些巧妙的基於瀏覽器的模擬。Box2d.js與Processing.js

有了我現在的想法,我想允許用戶單擊並拖動形狀,然後讓它掉落一旦釋放鼠標。到目前爲止,我已經能夠弄清楚如何使用b2MouseJoint對象來操作與mouseX/mouseY的身體協調,但它不是做得比較工作,以充分的程度。

所有這一切發生在一個形狀被點擊是被牽制和周圍什麼都mouseX/mouseY的一點是在點擊時的電流旋轉。

void mousePressed(){ 
    for(int i = 0; i < circles.size(); i++){ 
     //Get body objects from ArrayList 
     var obj = circles[i]; 

     // Retrieve shapes from body 
     var innerShape = obj.GetShapeList(); 
     var rad = innerShape.m_radius; 

     // Create mouseJoint and add attributes 
     var mouseJoint = new b2MouseJointDef(); 
     mouseJoint.body1 = world.GetGroundBody(); 

     // Detect body 
     if(dist(mouseX,mouseY,obj.m_position.x,obj.m_position.y) < rad){ 
      Vec2 p = new b2Vec2(mouseX,mouseY); 

      mouseJoint.body2 = obj; 

      mouseJoint.target = p; 
      mouseJoint.maxForce = 10000.0f * obj.GetMass(); 
      mouseJoint.collideConnected = true; 
      mouseJoint.dampingRatio = 0; 
      mouseJoint.frequencyHz = 100; 
      world.CreateJoint(mouseJoint);  
     } 
    }  
} 

所以基本上我的問題是,怎麼能這樣寫,而不是僅僅寄託形狀到位,使身體/外形沿用我的鼠標的座標,而我有鼠標按住。

乾杯

回答

1

基本上所有你需要做的就是增加你使用我們設置的mousePressed中的座標到的mouseDragged()方法,以及代碼,因爲這是事件方法被調用時鼠標與鬱悶的一個或多個按鈕感動:

void mouseDragged() 
{ 
    // update obj with mouseX and mouseY in this method 
} 

您可能還需要通過的mousePressed()過程中設置「一次點擊」標記變量,更新一套做更多的管理「偏移」變量在mouseDragged()過程中,並將偏移量提交給mouseReleased()中的標記,以便您可以執行一些操作,例如捕捉原點內部位置等