2013-03-02 143 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); 
} 

它工作得很好迄今。槍附着並隨罐旋轉。但是如果我想在沒有油箱的情況下旋轉噴槍(並且油箱已經旋轉)並且將旋轉中心設置回噴槍,那麼噴槍圖像被撤回到原始位置,失去了圍繞油箱旋轉的位置。

編輯:解決方案是使用不同的方法。根據tankImage旋轉的正弦/餘弦繪製gunImage依賴。

+0

如果您發現問題的解決方案,請繼續併爲其提交答案。你可以標記爲答案。 – Qix 2013-03-08 23:43:25

回答

1

解決方案是使用不同的方法。 繪製gunImage依賴於tankImage旋轉的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));