2013-01-03 100 views
0

我編寫了一個簡單的Java遊戲,其中有兩個矩形在屏幕上,其中一個矩形移動,另一個保持不動,移動的矩形移動與鍵盤箭頭輸入並可以向上,向下,向左或向右移動。我有被畫我的矩形屏幕上的問題,我的意思是我有2個矩形設置與我的變量,如下所示:有什麼辦法使用圖形類繪製一個可變的矩形

Rectangle rectOne = new Rectangle(shiftX, shiftY,90,90); 
Rectangle rectTwo = new Rectangle(500 + buckyPositionX, 330 + buckyPositionY, 210, 150); 

我已經做了渲染方法來繪製屏幕上的東西,我想所示:

public void render(GameContainer gc, StateBasedGame sbg, Graphics g) throws SlickException{ 
} 

我有是表示由render方法編寫的代碼我在屏幕上矩形的問題,我可以做到以下幾點:

g.fillRect(x, y,90,90); 
g.fillRect(500 + buckyPositionX, 330 + buckyPositionY, 210, 150); 

這使屏幕上有2個矩形,但我需要使用用變量編寫的矩形代碼繪製矩形,我被告知可以使用Graphics2D來完成,但是我想知道是否有更簡單的方法來使用圖形函數,如果不是,你能幫我設置一下嗎?

預先感謝您。

回答

2

您可以輕鬆地訪問Rectangle實例的屬性:

g.fillRect(rectOne.getX(), rectOne.getY(), rectOne.getWidth(), rectOne.getHeight()); 

在任何情況下,記住,通常Graphics對象是Graphics2D實例在運行時所以這可以很容易地工作太:

Graphics2D g2d = (Graphics2D)g; 
g2d.fill(rectOne); 
+0

謝謝你回答我的問題。我現在有一個新的問題,你可能能夠幫助我,我用fillRect(rectOne.getX()...並得到一個錯誤,說fillRect方法需要(float,float,float.float)而不是(double,double,double,double),我想這可能是因爲我的變量,我的rectOne需要shiftX和shiftY變量和rectTwo需要buckyPositionX和buckyPositionY,所有這些變量都是int,如果我改變它們以浮動我的Rectangle變量get錯誤,但如果我將它們更改爲int fillRect獲取錯誤,我該如何解決此問題? –

+0

將它們投射爲double或使用Rectangle2D.Double而不是Rectangle,這是一個內部類僅用於此 – Jack

+0

我已嘗試過,但不斷獲取fillRect下面的錯誤:「此方法fillRect(float,float,float,float)在類型圖形中不適用於參數(double,double,double,double)」 –

1

只需使用:

g.fillRect(myRect.getX(), myRect.getY(), myRect.getWidth(), myRect.getHeight()); 

其中myRect是要繪製的矩形。如果要繪製大量矩形,您甚至可以製作自定義方法drawRect(Graphics g, Rectangle myRect);

使用Graphics2D並不難,以及作爲提供Graphics對象通常是Graphics2D對象:

Graphics2D g2d = (Graphics2D) g; 
g2d.fill(myRect); 
+0

謝謝你回答我的問題。我現在有一個新的問題,你可能能夠幫助我,我用fillRect(rectOne.getX()...並得到一個錯誤,說fillRect方法需要(float,float,float.float)而不是(double,double,double,double),我想這可能是因爲我的變量,我的rectOne需要shiftX和shiftY變量和rectTwo需要buckyPositionX和buckyPositionY,所有這些變量都是int,如果我改變它們以浮動我的Rectangle變量get錯誤,但如果我將它們更改爲int fillRect會得到錯誤,請問我該如何解決這個問題? –

+0

當您將'double'值傳遞給'fillRect()'時,您只需將'double'值轉換爲'float' – Veger

+0

我嘗試了你的方法,改變了一切,但是不管我嘗試什麼,我在fillRect下繼續得到下面的錯誤:「這種方法fillRect(float,float,float,float)類型的圖形不適用於參數(double,double,double,d雙重)「 –