2012-10-10 71 views
0

對不起,如果標題有點模糊。無論如何,我正在使用Java製作平臺遊戲,並且我一直在試圖創建一個壓力板觸發式分配器,用於射中毒飛鏢。遊戲幾乎分成了一個網格系統,每個網格都是網格上的一個點。到目前爲止,我已經做到這樣,當壓力板被激活時,它看起來好像被按下了。我也可以把它畫到屏幕上,但它不會移動或任何東西。這是我用它繪製到屏幕上的代碼:不知道如何畫「毒鏢」

public void drawDart(Graphics g) { 
    if(Component.isPressed) { 
     for(int x = 0; x < block[0].length; x++) { 
      for (int y=0; y < block[0].length; y++) { 
       if(x == 91 && y == 35) { 
        block[x][y] = new Block(new Rectangle(x * Tile.tileSize, y * Tile.tileSize, Tile.tileSize, Tile.tileSize), Tile.poisonDart); 
       } 
      } 
     } 
    } 
} 

不幸的是,當我踩壓盤這段代碼,飛鏢繪製,但不會移動。我曾嘗試過使用x ++,但根本不移動飛鏢。

另一個問題是,我希望飛鏢看起來像受重力影響,當遊戲分裂成大型網格系統時很難做到。無論哪種方式,你們覺得呢?

主持人編輯(從OP評論移動):

block[x][y] = new Block(new Rectangle(x * Tile.tileSize, y * Tile.tileSize, 
    Tile.tileSize, Tile.tileSize), Tile.poisonDart); 
+1

這裏沒有足夠的上下文來理解這個問題。請閱讀[常見問題]和[問]關於如何編寫好的SO問題的提示。 –

+0

您看起來確實沒有在您向我們展示的代碼中繪製任何內容?要生成動畫,您需要爲每次重畫(框架)繪製不同位置的東西,而不僅僅是在重繪方法內的循環中繪製東西。 – DNA

+0

block [x] [y] = new Block(new Rectangle(x * Tile.tileSize ,y * Tile.tileSize,Tile.tileSize,Tile.tileSize),Tile.poisonDart);這是繪製飛鏢的代碼行,對此抱歉,我忘了解釋它。 = /我不知道我怎樣才能改變立場,雖然是問題,因爲簡單地減少或增加'x'似乎不起作用。 – Connor

回答

1

您是否實施了 「遊戲循環」 爲你的遊戲?它看起來像這樣(僞代碼):

while (gameRunning) { 
    for (GameEntity e in gameWorldEntities) { 
    e.update(timePassed); 
    } 
    for (GameEntity e in gameWorldEntities) { 
    e.draw(); 
    } 
} 

每個鏢對象應該知道它在遊戲世界中的位置,以及飛鏢類的update()方法應該更新自己的立場,其中包括水平移動它,如果它已經啓動,使其因重力而墜落。跟蹤其水平和垂直速度是一個好主意,除非你使用單獨的物理引擎,這聽起來像你不是。然後draw()方法只需要在正確的位置將其繪製在屏幕上。

+0

哦,好的!謝謝!我現在就試試。 – Connor

+0

編輯:其實,你的意思是「GameEntity e在gameWorldEntities」? – Connor