2014-09-14 2 views
0

그래서, 일정 거리에있는 내 선수 오브젝트 주위에 마우스를 따라 사각형을 가지고있는 코드를 발견했습니다. 2D 비행기에서 나는 캐릭터를 가지고 있으며 플레이어가 마우스 버튼을 클릭하면 마우스와 캐릭터 사이에 방패가 생깁니다. 이 부분은 작동하며 코드는 다음과 같습니다.이상한 행동으로 이어지는 각도 계산

var angle; 
var track_radius = 10; 

// find the angle to the mouse 
angle = point_direction(self.x, self.y, mouse_x, mouse_y); 

// turn the shield to look at the mouse 
image_angle = angle; 

// convert to radians for the math functions 
angle = degtorad(angle); 

// place the shield on a circular track about the player 
// . track_radius is set in the create event 
x = global.playerX + 50 * cos(angle); 
y = global.playerY - 50 * sin(angle); // minus 

따라서 마우스가 실드에 가까이 오면 문제가 발생합니다. 방패는 두 개로 나뉘며 마우스 포인터를 가로 질러 대칭 이동하여 앞뒤로 깜박입니다. 문제는 마우스가 방패가있는 반경 내에 있거나 반경 내에있을 때마다 기본적으로 계속됩니다. 또한 마우스를 클릭했을 때 플레이어의 위치에서 방패가 만들어지고 위 코드를 사용하여 방패가 움직 였음을 알리는 것이 좋습니다. 생각? self은 실드를 참조하기 때문에

답변

0
angle = point_direction(self.x, self.y, mouse_x, mouse_y); 

이 코드는 마우스 포인터로 실드의 각도를 계산한다. 차폐 장치의 플레이어의 각도는 상기 산출 된 각도와 동일하도록

x = global.playerX + 50 * cos(angle); 
y = global.playerY - 50 * sin(angle); // minus 

여기서는 플레이어 실드의 위치를 ​​설정.

이제 마우스가 방패에 가깝고 방패에서 마우스까지의 방향이 플레이어에서 마우스 방향과 다릅니다. 아래의 잘못된 ASCII 그래픽에서 O는 플레이어이고,)는 방패이고 ^는 마우스 커서입니다.

O ------) 
     ^

방패는 플레이어의 오른쪽 (0 °)에 있지만 방패 (270 °) 바로 아래에 있습니다. 따라서 귀하의 코드를 직접 플레이어 아래의 방패를 배치합니다 다음 단계에서

O   
|  ^
| 
| 
) 

(기억, 코드에서 angle 마우스 실드에서 방향이다), 코드는 다시 실드에서 방향을 취 마우스. 이번에는 실드보다 45 ° 더 닮았 기 때문에 실드는 플레이어의 45 ° 위쪽과 오른쪽에 배치됩니다.

마우스 커서를 중심으로 두 개의 번갈아 나타나는 위치에서 실드가 고정 될 때까지 점프가 앞뒤로 반복됩니다.

해결책을 찾기 위해 플레이어에서 마우스 커서 방향을 사용하여 방패 위치를 결정하고 방패에서 마우스 커서 방향을 결정합니다. 그러나 우연히 만든 시스템의 역 동성이 다소 재미 있다고 말할 수 있습니다.

+0

그건 속임수였습니다! 고맙습니다! – Maxw3ll