2011-01-03 4 views
0

내가 알카노이드 같은 게임을 만들고있어 마우스로 배를 이동 사용은 :패들 운동, 나는 다음과 같은 코드를 사용하고 Box2D의

var mousex:int = costume.stage.mouseX; 
if (mousex < paddleWidth/2) 
    mousex = paddleWidth/2; 
else if (mousex > PhysiVals.STAGE_WIDTH - paddleWidth/2) 
    mousex = PhysiVals.STAGE_WIDTH - paddleWidth/2; 

var idealLocation:Point = new Point(mousex, ypos); 

var directionToTravel:b2Vec2 = new b2Vec2((idealLocation.x -> costume.x) * PhysiVals.paddleSpeed, idealLocation.y-costume.y); 

directionToTravel.Multiply(1/PhysiVals.RATIO); 

directionToTravel.Multiply(30); 

body.SetLinearVelocity(directionToTravel); 

모든 것이 잘있다거야! 외륜은 그것이해야하는 길을 움직이고있다! 문제는 움직이는 방향으로 약간 기울어지기를 바라는 것이며, 움직임이 멈 추면 기울기 각도가 0이되어야한다는 것입니다. 나는 각속도로 노는 것을 시도했다 그러나 나는 이것을하는 진짜 아이디어가 없다! 그래서 제발 도와주세요!

답변

1

신체의 각속도는 회전 속도이며, 정확하게 기억한다면 Box2D는 라디안/초 단위로 측정합니다. 그래서 1로 설정하면 느린 회전이 보일 것입니다. (그렇지 않으면, 그것은 내가 단위에 대한 틀렸다거나 회전을 방지 몸에 제약 조건이된다는 사실을 의미 할 수 있음을 의미 할 수 있습니다.)

body.SetAngularVelocity(1); 

그러나 그것을 시체를 특정 각도로 움직이기를 원하는 것처럼 들립니다. SetXForm 함수를 사용하면 새로운 위치와 각도를 지정할 수 있습니다.하지만 이것을 사용하면 연락처 시스템이 엉망이됩니다. Box2D는 항목이 진정으로 장소로 순간 이동하지 않는 한 이것을 사용하지 말 것을 권장합니다.

귀하의 외륜이 그렇게하지 않으므로 아마도 이것을 시도 할 수 있습니다.

body.SetAngularVelocity((targetAngle - body.GetAngle()) * x); 

여기서 x는 회전 속도를 제어하는 ​​상수입니다. 클립의 FPS로 설정하면 몸체가 프레임 내에서 올바른 각도로 스냅됩니다. 각도를 낮게 설정하면 필요한 각도로 더 부드럽고 부드럽게 회전 할 수 있지만 다른 신체와의 접촉으로 인해 신체의 회전이 영향을 받기 쉽습니다.

같은 트릭은 설정된 목표 위치로 몸을 이동하기 위해 작동하지만, 더 자세한입니다 :

var delta:b2Vec2 = new b2Vec2(target.x, target.y); 
delta.Subtract(body.GetPosition()); 
delta.Multiply(x); 
body.SetLinearVelocity(delta); 

그것은 다른 정적 몸이 거기에 있다면 이들 중 어느 것도 작동 할 수있는 것은 물론 모션을 방해하지 않습니다. 또한 이들 중 하나를 사용하여 Box2D가 생성하는 각도/선형 속도를 덮어 쓰고 있습니다. 즉, 시뮬레이션의 입자에 맞서는 것입니다.

주의 : 코드는 테스트되지 않으며, 이미 문제를 정리했다하더라도 메모리

+0

에서 작성되었습니다, 나는 내 다른 프로젝트에서 대상 위치로 몸을 이동하기 위해 트릭을 사용했다. 고마워요. :) : D –

관련 문제