2011-08-24 12 views
0

저는 사용자가 터치 할 때마다 마우스 조인트를 사용하여 피스를 움직이려고했습니다. 그러나 관절에 의해 영향을받는 작품은 이상하게 행동하고 절대로 도달하지 못합니다.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의 앵커 포인트를 확립 할 수있는 방법을 찾고 있었다, 나는 것 같다 언급 한 '이상한 행동'과 같은 : 이것은 (x와 y가 이미 '물리적'단위로 변환된다) 코드입니다 마치 앵커 포인트가 몸체의 바깥쪽에있는 것처럼 (육각 모양, 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 x 2.0f)이 문제를 해결했습니다. 또한, 내 의도에 가장 적합한 조인트가 아닐 수도 있습니다 (특정 오브젝트를 화면의 한 위치로 이동).

관련 문제