2012-09-30 42 views
0

我正在開發一個模擬3D而不實際使用任何3D庫的java管射擊遊戲類遊戲。現在我有一個由玩家控制的船隻,在屏幕的中心點旋轉,使用(在這種情況下,右移)。如何在遠程點周圍旋轉單個圖像

angle += 0.1; 
    x = Math.cos(angle) * radius + cX; 
    y = Math.sin(angle) * radius + cY; 

angle是相對於中心點的放置(例如:270直接是中心下),xy是當前船舶位置,radius是從中心的距離,和cXcY是中心點的位置。現在圍繞着這個點順利旋轉,但我不知道如何處理旋轉實際的船隻,以始終指向中心。我在網上瀏覽過很多東西,但無法弄清楚如何在不影響屏幕上的其他對象的情況下旋轉個人Image(或者如果這不起作用,則可以旋轉drawLines的數組)。長期以來,人們會如何去旋轉個人Image以不斷指向一個遙遠的x,y位置?

回答

0

你需要的是AffineTransform類,它基本上是java中的一個矩陣類。 Graphics2D具有接受一個AffineTransform實例平局圖像變體:

boolean java.awt.Graphics2D.drawImage(Image img, AffineTransform xform, ImageObserver obs) 

創建轉換,你可以使用二維矩陣運算:

AffineTransform trans = new AffineTransform(); 
trans.translate(x, y); 
trans.rotate(theta); 
trans.scale(scalex, scaley); 
etc... 

記住順序很重要,也許你會想首先進行縮放,然後旋轉,然後將圖像拖放到相應的位置。它應該沒問題。 Java已經使用了一些3D功能來儘可能快地繪製它,它比軟件渲染器更快,但距本地opengl還有很遠的距離。