2013-03-02 2 views
1

저는 프로그래밍에 익숙하지 않습니다. 그리고 탱크 위쪽과 다른 총을 indepently 컨트롤 할 수있는 작은 게임을 만들고 있습니다. (나는 매끄러운 것을 사용하고있다.)자바 : 다른 지점 주위의 이미지 회전

탱크가 회전하는 동안 총이 탱크 이미지의 중앙을 중심으로 회전해야한다.

public void drawTankandGuns(){ 
    tankImage.draw(position.x, position.y); 
    gunImage.draw(position.x+canonOffsetX, position.y+canonOffsetY); 
} 

public void rotateDuringMovement(){ 
    gunImage.setCenterOfRotation(tankImage.getWidth/2-gunOffsetX, 
    tankImage.getHeight/2-gunOffsetY); 

    gunImage.rotate(angle); 
    tankImage.rotate(angle); 
} 

지금까지 문제없이 작동합니다. 건이 달려 있고 탱크와 함께 회전합니다. 하지만 탱크가없는 상태에서 총을 회전시키고 (탱크가 이미 회전 한 경우) 회전 중심을 총으로 다시 설정하려면 총 이미지가 원래 위치로 되돌아 와서 탱크 주위를 회전시켜 위치를 잃어 버리십시오.

편집 : 해결책은 다른 접근 방식을 사용하는 것이 었습니다. gunImage를 tankImage 회전의 sin/cos에 의존하여 그립니다.

+0

문제에 대한 해결책을 찾은 경우 계속해서 답변을 제출하십시오. 당신은 답을으로 표시 할 수 있습니다. – Qix

답변

1

해결책은 다른 접근법을 사용하는 것이 었습니다. gunImage를 tank 이미지 회전의 sin/cos에 의존하여 그립니다.

//calculate the gun position on top of the tank 
gunPosX = tankPosX + gunPosOffsetX; 
gunPosY = tankPosY + gunPosOffsetY; 

//calculate the tank rotation center 
tankRotationsCenterX = tankPosX + tankImage.getCenterOfRotationX(); 
tankRotationsCenterY = tankPosY + tankImage.getCenterOfRotationY(); 

//calculate distance between gun position and tank rotation center 
dx = tankRotationsCenterX - gunPosX ; 
dy = tankRotationsCenterY - gunPosY ; 
dis = Math.sqrt(dx * dx + dy * dy); 

//calculate the offset based on the rotation of the tank 
//rotation offset for the gun placement 
gunRotaOff = 20; 

gunX_offset = dis*Math.cos(Math.toRadians(tankImage.getRotation()+gunRotaOff)); 
gunY_offset = dis*Math.sin(Math.toRadians(tankImage.getRotation()+gunRotaOff)); 

gunXhalf = gun.getImage().getWidth()/2; 
gunYhalf = gun.getImage().getHeight()/2; 

//draws the gun dependend on the ship position and the ship rotation 
//don't forget to subtract half the width/height for exact positioning 
gun.drawIngame(tankRotationsCenterX - gun_x_offset)-gunXhalf , (tankRotationsCenterY - gun_y_offset) - gunYhalf));