2015-01-16 5 views
0

스프라이트의 꼭짓점이나 좌표를 찾아야합니다.libgdx - 스프라이트의 위쪽 가장자리 좌표를 찾으십니까?

저는 기본적으로 사용자가 스프라이트를 움직이고 회전시킬 수있는 게임을하고 있습니다. 이 스프라이트는 화살표이며, 회전이 멈 추면 화살표의 방향으로 진행하기위한 좌표를 찾아야합니다. 나는 원점과 스프라이트의 위쪽 모서리 사이에있는 벡터를 도출하려고 생각했다. 이것은 스프라이트의 끝 부분에 해당한다. 그리고 'orirgine을 가리 키기 위해 앵커 포인트를 추가 할 수 있습니까?

답변

0

귀하의 질문이 잘못된 가정에 근거하기 때문에 나는 다른 질문에 답할 것입니다. 스프라이트의 원점과 스프라이트의 상단 사이의 방향을 계산하는 것은 나쁜 생각입니다. 그것은 불필요하게 복잡합니다.

원하는 결과를 얻으려면 필요한 간단한 삼각법을 사용해야합니다. 기본적으로 선형 (x, y) 이동을 취해 임의의 방향으로 변환하려고합니다.

왜 이렇게 작동하는지에 대한 복잡한 설명은하지 않지만, Math 자바 모듈에 내장 된 두 가지 trig 함수는 Sin과 Cos입니다. 스프라이트를 이미 회전시키고 있다고 가정하면, 당신이 회전의 각도 (아마 sprite.getRotation())에 액세스 할 수 있습니다,이 작업을 수행 :

setX(getX() + (Math.sin(Math.toDegrees(myAngle)) * speed)) 
setY(getY() + (Math.cos(Math.toDegrees(myAngle)) * speed)) 

당신이 개체를 이동 Box2D의를 사용하는 경우, 그럼 그냥 applyLinearImpulse 또는 applyForce 전화 여기서 x와 y 인수는 각각 setX() 및 setY() 내부의 방정식입니다.

이 경우 myAngle은 프레임 당 업데이트되어 스프라이트의 현재 각도를 저장해야합니다. 이것은 기본적으로 라디안이나도 단위가 될 것이므로 손에서 벗어날 수는 없지만 이미 도수가 있다면 Math.toDegrees()를 통해 전달해야 할 필요가 없습니다. 그렇게하면 이상한 결과가 나타납니다. 속도는 엔티티를 이동하려는 프레임 당 속도 (픽셀)입니다.

이상한 설명 : 이론 원의 중심에서부터 물체가 가리키는 방향을 기준으로 원의 일부 지점으로 물체를 움직이는 것으로 생각하고있는 것을 생각해보십시오. 이 가상 원의 반지름은 물체가 움직이는 "속도"입니다. 따라서 원의 원점에서 방향과 원점을 기준으로 한 원의 점을 찾으려면 삼각법을 사용합니다.

임의의 각도의 사인은 0과 1 사이 (0과 90도)이지만 각도가 커질수록 더 느리게 증가합니다 (원호와 관련하여 예를 들어 물체가 원으로 움직이고 움직임의 x 좌표 만 추적하면 진자처럼 보일 수 있습니다 (이 부분은 http://upload.wikimedia.org/wikipedia/commons/3/3b/Circle_cos_sin.gif 참조).

코사인은 사실상 사인과 반대이며, 따라서 90도에 접근하면 작아집니다. 이 숫자 중 가장 높은 값이 1이기 때문에 반지름으로 곱하면됩니다. 그리고 서로의 역수가되면 원에 점을 제공합니다.

그것이 의미가 있는지 나는 모른다. 나는 이런 것들을 잘 설명 해본 적이 없다.

관련 문제