2017-01-20 11 views
1

나는이 질문을 이미 다른 방식으로 여기에서 물어 보았습니다. Swift-Setting a physics body velocity by angle하지만 세 가지 시도는 불행히도 내가 뭘 찾고 있는지 정확히 알 수는 없지만 어쨌든 나에게 가르쳐 주신 것에 감사드립니다. 코멘트를 통해 토론을 영속화하는 대신 예제와 추가 설명으로 제 질문을 간단히 다시 말해야한다고 결정했습니다. 그래서 여기 있습니다.스위프트 - SKNode를 앵글에서 단순히 "앞으로 움직이십시오"

SKNode가 화면 중앙에 위치한다고 가정 해 보겠습니다. 공이라고 가정 해 보겠습니다. 회전 동작은 표시되지 않습니다. 난 임의의 각도를 선택하는 방법이 필요하고, SKNode 그것을 회전하고, 말했듯이, 화면의 중심에서 원래 위치에서 위에서 언급 한 각도로 결정된 방향으로 계속 움직이는 말, 예를 들어, 말, 화면.

랜덤 각도를 결정하는 방법을 알고 있고, SKNode를 회전시키고 화면 가장자리에서 멈추게하는 방법을 알고 있습니다. 이 예제를 사용하면 SKNode가 앞으로 나아갈 수있는 방법이 분명하지만 단일 변수로 결정된 각도에서 두 속도 (dx와 dy)로 결정되는 속도가 아니라 명확한 방법이 필요합니다.

미리 감사드립니다.

답변

2

이렇게하려면 몇 가지 삼각법을 사용해야합니다.

zRotation이 0과 90 사이 일 경우 각도를 라디안으로 변환하는 것 외에는 아무 것도 할 필요가 없습니다. tan(radianAngle)으로 전화하면됩니다. 이제 tan은 노드가 x 축에서 1만큼 이동할 때 노드가 y 축에서 얼마나 움직여야하는지 반환합니다. 전에 삼각법을 배웠다면, 내가 말하는 것을 이해해야합니다. 삼각법을 배우지 않았다면 배우십시오. :)

노드의 zRotation이 60도 (π/3 라디안)라고 가정 해 봅시다. 그것을 tan으로 전달하면 √3이됩니다. 즉 노드가 60도 방향으로 움직이게하려면 dxdy 매개 변수는 SKAction이어야하며 1 : √3이어야합니다.

zRotation이 90과 180 사이 일 때 먼저 180에서 각도를 뺀 다음 라디안으로 변환해야합니다. 다시 tan으로 전달하면 반환 값은 노드가 x 축에서 -1만큼 이동할 때 노드가 y 방향으로 이동해야하는 거리입니다. dx : dy 비율은 이제 -1 : tan (angleInRadians)입니다.

zRotation이 180-270 인 경우 해당 각도에서 180을 빼고 라디안으로 변환하십시오. dx : dy 비율은 -1 : -tan (angleInRadians)입니다.

마지막으로, zRotation은 270 및 360으로, 360에서 각도를 빼고 라디안으로 변환합니다. dx : dy 비율은 1 : -tan (angleInRadians)입니다.

각도를 라디안으로 변환하기 직전에 각도가 90도인지 확인하십시오. 이 경우 tan(M_PI/2)이 정의되지 않았기 때문에 dxdy을 하드 코딩하십시오.