2012-05-11 2 views
1

내 문제는 간단 할 수도 있습니다. 저는 오늘날 대부분의 사람들이 마우스가 가리키는 방향을 결정하고 그 방향으로 총알을 쏘는 알고리듬 (아마도 두 문장 if 문일 것입니다)을 생각해 보았습니다. 나는 이미 총알을 테스트하여 그들이 정의 된 방향으로 총격을 가도록 쏘았는지 확인했다.자바 2d 마우스로 촬영 방향

마우스가 플레이어의 왼쪽, 오른쪽, 위쪽, 아래쪽 또는 플레이어 모서리에 있다면 어떻게 계산합니까?

해결 : 모든 도움 주셔서 감사하지만 생각의 하루 후에 나는 내 자신을 길을 내놓았습니다. 내가 한 것은 if 문을 사용하여 마우스를 눌렀을 때를 결정합니다. 플레이어, 하단, 오른쪽, 왼쪽 또는 모퉁이의 상단 부분과 충돌 할 것입니다. 어쨌든, 여기 내 코드가있다. 추신 변수 x1을 mousex, y1을 mousey, x를 playerx, y를 선수 y로 사용했습니다. 내가 가지고있는 유일한 변수는 dx와 dy이지만 그게 무엇인지 알아야합니다.

//top 
if (x1 > x && x1 < x + 40 && y1 > y - 250 && y1 < y){ 
     dy = -1; 
    dx = 0; 
} 
//right 
if (x1 > x + 40 && x1 < x + 250 && y1 > y && y1 < y + 40){ 
    dx = 1; 
    dy = 0; 
} 
//bottom 
if (x1 > x && x1 < x + 40 && y1 > y+40 && y1 < y+250){ 
    dy = 1; 
    dx = 0; 
} 
//left 
if (x1 < x && x1 > x - 250 && y1 > y && y1 < y + 40){ 
    dx = -1; 
    dy = 0; 
} 
//top right corner 
if (x1 > x + 40 && x1 < x + 250 && y1 > y - 250 && y1 < y){ 
    dx = 1; 
    dy = -1; 
} 
//top left corner 
if (x1 < x && x1 > x - 250 && y1 > y - 250 && y1 < y){ 
    dx = -1; 
    dy = -1; 
} 
//bottom right corner 
if (x1 > x + 40 && x1 < x + 250 && y1 > y + 40 && y1 < y + 250){ 
    dx = 1; 
    dy = 1; 
} 
//bottom left corner 
if (x1 < x && x1 > x - 250 && y1 > y + 40 && y1 < y + 250){ 
    dx = -1; 
    dy = 1; 
} 
+2

실제 질문은 무엇입니까? 마우스가있는 곳 (x와 y 좌표)을 알고 총이 어디에 있는지 알면 간단한 지오메트리와 수학이 총알의 각도 또는 x와 y 속도를 결정해야합니다. – DGH

+0

내 실제 질문은 마우스가 플레이어의 왼쪽, 오른쪽, 위쪽, 아래쪽 또는 플레이어 모서리에있는 경우 어떻게 계산할 것입니까? – 36redsoxfan

+2

간단한 대수가 당신에게 대답 할 것입니다. -보고있는 모든 것이 일반적인 방향이라면 삼각법도 필요하지 않습니다. 무엇을 시도 했습니까? 코드에서 어디서 붙어 있습니까? –

답변

1

마우스 버튼을 누르고있는 동안 촬영을 구현하려면 마우스 이동 액션 리스너를 구현해야합니다.

간단한 방정식을 사용합니다.

솔루션 : 버튼을 누를 때 초기 점 (x0,y0)가 표시됩니다. 마우스를 움직이면 마우스가 움직이는 지점이 (x1,y1)이됩니다. (계속 변화합니다) - 선 방정식을 얻으십시오 - (2 점을 얻으려면 slope을 찾은 다음 한 점을 사용하여 equation of the line을 얻으십시오).

이제 총알이 발사되는 방향이 perpendicular to this line through (x1,y1)입니다. 따라서 다른 방정식을 알고있을 때이 수직선의 방정식을 찾을 수 있습니다. 이제는 위아래로 움직여야하는지 알기 위해 총이 겨냥 된 방향을 알아내는 것과 관련이 있습니다 (방향은 변수에 저장 됨)

이 모든 후, 마우스가 움직일 때 이전 포인트는 이제 (x1,y1)이됩니다 새로운 포인트는 (x2,y2)이고 이러한 변경 사항은 계속 적용됩니다.

+0

글쎄, 총 정렬 (N), 아래 (S), 오른쪽 (E) 또는 왼쪽 (W)을 찾는 방법을 알고 싶다면 - 초기 위치에서 처음으로 게임이 시작될 때 일정한 위치에 총을 표시합니다), 플레이어가 스크롤 할 때 (또는 일부 버튼이나 키를 사용하여 구현할 수있는 경우) 방향을 NE 또는 E 또는 SE 또는 S 등으로 또는 각도 (도)로 변경하고 각도 정보를 변수에 저장할 수 있습니다 – Subs