2014-07-26 3 views
2

나는 우주선이있는 우주 테마 게임을 카메라와 함께 움직이고 SIN & COS 함수를 사용하여 1도 정확도로 회전시킨다. 우주선이 움직이고 올바르게 회전합니다. 나는 지금 우주선에서 총을 발사하고있다.다른 스프라이트의 회전을 기반으로 한 스프라이트의 위치 변경

지금까지 어떤 방향으로 향하고 있더라도 우주선에서 바로 발사 할 수 있습니다. 그러나 나는 우주선이 직면하고있는 곳을 기반으로 총을 낳을 수있는 방법이 있는지 궁금해하고있었습니다. 나는 그것이 산란 된 후에 총의 모든 각도를 다룰 수 있습니다. 우주선의 회전에 따라 우주선 앞에서 산란시키는 방법을 아직 이해할 수 없습니다. 나는 C++ (11)

와 SDL2을 사용하고

나는 가능하면 내가 그로부터 아무것도 배울하지 않기 때문에 직접 나에게 코드를 말하고 싶어하지 않는다. 나는 이것을 학습 경험으로 사용하고있다. 우주선 360도 회전주기의 각 1도 각도마다 스폰 지점 위치를 표시해야합니까? 아니면 그러한 일을하는 더 역동적 인 방법입니까?

답변

1

우주선 회전에 삼각 함수를 적용하여 x 및 y 오프셋을 계산할 수 있습니다. 이것을 우주선 위치에 추가하면 발사체의 절대 위치가 결정됩니다. 예를 들면 다음과 같습니다.

bulletRotation = shipRotation; 
bulletCenterX = shipCenterX + cos(shipRotation) * offset; 
bulletCenterY = shipCenterY + sin(shipRotation) * offset; 

이미 글 머리 기호 물리를 구현 한 경우 해당 논리를 다시 사용할 수도 있습니다. 총알을 조금만 앞으로 내리십시오.

각도와 라디안을 혼합하지 않도록주의하십시오.

0

O를 우주선의 중심, O를 원점으로하는 O 축, 그리고 A 점을 찾고 싶습니다. A의 좌표는 O와의 거리 (우주선 만 회전해도 일정해야 함)와 OA와 Ox 사이의 각도 θ를 알고있는 한 쉽게 결정할 수 있습니다. O 상대

,

Ax = OA * cos(theta) 
Ay = OA * sin(theta) 

는 절대 좌표, 그냥 당신이 당신의 샷의 탄도를 계산하는 방법을 모르겠어요 O.

의 좌표에 상대적을 추가 할 얻으려면, 그러나 비슷한 방식으로 할 수 있습니다 (O가 움직이지 않는 한 거리 OA 만 변경하면됩니다).

관련 문제