2011-08-24 77 views
0

我一直試圖使用MouseJoint在用戶觸摸的任何地方移動一塊。但這件作品受到關節的影響,表現奇怪,從未達到過這一點。這是代碼(x和y已經轉換爲「物理」單位):MouseJoint沒有正常工作

MouseJointDef mj_def; 
MouseJoint mj = null; 
Body mj_gbody; 

public void move(float x, float y) 
{ 
    if(mj == null) 
    { 
     BodyDef mgbd = new BodyDef(); 
     mj_gbody = wrld.createBody(mgbd); 
     // 
     mj_def = new MouseJointDef(); 
     mj_def.bodyA = mj_gbody; 
     mj_def.bodyB = body; 
     mj_def.collideConnected = true; 
     mj_def.maxForce = 20.0f * body.getMass(); 
     //mj_def.target.set(x,y); 

     mj = (MouseJoint)wrld.createJoint(mj_def); 
     body.setAwake(true); 
    } 

    mj.setTarget(new Vector2(x, y)); 
} 

我一直在尋找一些方法來建立在BodyB錨點,正如我所提到似乎是「奇怪的行爲」使身體在建立點周圍(物體寬度的兩倍軌道)吸引,就好像錨點位於體外(六角形,btw)一樣。但是我在libgdx中看不到任何方式。

有人知道我在做什麼錯嗎?先謝謝你!

回答

0

那麼,MouseJoint工作正常,我只是誤解了MouseJoint的工作原理。

由於在Box2d測試平臺中清楚地看到,MouseJoint用於在選擇對象後進行拖動。因此,錨點被分配在第一個target.set中。

正如我想要將對象的中心移動到鼠標所在的位置(或用戶觸摸的位置),初始化中的一個mj_def.target.set(body.getPosition().x + 2.0f, body.getPosition().y + 1.0f);(對象爲4.0f乘2.0f)解決了問題。此外,它可能不是我的意圖最好的聯合(將特定對象移動到屏幕中的一個位置)。