2012-05-05 2 views
2

총상이 탱크 이미지 위에 있습니다. 마우스가 조준하는 데 사용할 수 있도록 총이 마우스 위치를 향하게해야합니다. 원래의 총 이미지가 위쪽을 향하게됩니다. 나는 Slick2D를 사용하고 있으며 이미지 클래스는 각도를 취하는 회전 함수를 가지고있다. 이 일을 어떻게 하죠?이미지를 '포인트'로 마우스 위치로 옮깁니다.

답변

7

입력 개체를 요청하여 사용자 마우스의 위치를 ​​찾을 수 있습니다. 이 작업은 GameContainer에 입력을 요청하여 수행됩니다.

Input userInput = gameContainer.getInput(); 
float mouseX = userInput.getMouseX(); 
float mouseY = userInput.getMouseY(); 

마우스와 총의 위치를 ​​사용하여 총이 직면해야하는 각도를 결정할 수 있습니다. 우리는 총과 마우스 사이에 선을 그리고이 선의 각도를 찾는 것을 상상할 수 있습니다. 이 각도는 마우스가 마우스를 가리 키도록 총이 향해야하는 각도입니다.

Vector2f gunLocation = gun.getLocation(); 
float xDistance = mouseX - gunLocation.x; 
float yDistance = mouseY - gunLocation.y; 
double angleToTurn = Math.toDegrees(Math.atan2(yDistance, xDistance)); 
gunImage.setRotation((float)angleToTurn); 
+0

덕분에, 나는 내 게임에 코드를 넣어 그것은 일종의했다. 총은 회전하지만, 마우스를 움직이는 속도의 절반 밖에 안됩니다. 마우스를 총의 다른 쪽으로 움직이면 다른 방향으로 회전하기 시작합니다. 무엇이 잘못 될 수 있는지 알고 있습니까? –

+0

흥미 롭습니다. 이것은 본질적으로 내 자신의 게임에서 코드 조각이므로 나는 그것이 작동 확신. Math.atan2를 사용하고 있는지 확실합니까? 나는 Math.atan이 [pi/2, -pi/2]의 범위를 가지기 때문에 Math.atan2의 범위는 [pi, -pi] –

+0

이기 때문에 단지 묻습니다. Tank 클래스의 'update'함수의 코드는 다음과 같습니다. http : //pastebin.com/KsQUWdEr이 클래스의 인스턴스를 선언하고 내 게임 플레이 상태의 업데이트 섹션에서이 메서드를 호출합니다. –

0

은이 같은 수행 목표 :

마우스로 탱크에서 방향은 같다 :

float deltaX = mouse.x - tank.x; 
float deltaY = mouse.y - tank.y; 

// The resulting direction 
return (int) (360 + Math.toDegrees(Math.atan2(deltaY, deltaX))) % 360; 

그냥 현재 마우스 위치 예에 탱크의 방향을 갱신 mouseMoved 이벤트입니다.

이미지를 회전 : "Graphics2D", "affine transform", "translation" :

는 스택 오버 플로우를 살펴 또는 자바 문서를 되세요. 어쩌면 엔진이 이미 일부 라이브러리 기능을 제공하고 있을지도 모릅니다.

희망이 있습니다.

0

위의 답변을 구축하려면 ..

y 축이 시도는 감소하기 때문에 :

float deltaX = mouse.x - tank.x; 
float deltaY = tank.y - mouse.y; 
관련 문제