2013-03-02 6 views
1

Я довольно новичок в программировании, и я пытаюсь сделать небольшую игру, где вы можете контролировать (вращать) танк и различные пушки на верхней части бака независимо друг от друга. (Я использую пятно)Java: поворот изображения вокруг разных точек

Во время вращения танка орудия должны вращаться вокруг центра цистерны, потому что они прикреплены.

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 от sin/cos вращения цистерны.

+0

Если вы нашли решение проблемы, отправьте ответ на него. Вы можете отметить это как ответ. – Qix

ответ

1

решение должно было использовать другой подход. Нарисуйте gunImage в зависимости от 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));