2013-07-16 90 views
0

好吧,所以我有一個遊戲,我剛開始,我有點卡在順利滾動。我有基本的滾動部分完成,但我的背景(網格)只有很抱歉的減法和加法在for循環的50Java平滑滾動(遊戲)

for (int x = (getPlayerX()/getTileSize()) - 6; x < (getPlayerX()/getTileSize()) + 9; x++) 
{ 
    for (int y = (getPlayerY()/getTileSize()) - 5; y < (getPlayerY()/getTileSize()) + 8; y++) 
    { 

     int xPos = ((x - (getPlayerX()/tileSize)) + (getScreenX()/tileSize) - 1) * tileSize; 
     int yPos = ((y - (getPlayerY()/tileSize)) + (getScreenY()/tileSize) - 1) * tileSize; 
     if (x > 0 && x < mapX && y > 0 && y < mapY) 
     { 
      if (getTiles()[x][y].tileID == 0) 
      { 
       g.drawRect(xPos, yPos, tileSize, tileSize); 
      } 

      if (getTiles()[x][y].tileID == 1) 
      { 
       g.fillRect(xPos, yPos, tileSize + 1, tileSize + 1); 
      } 
     } 
    } 
} 

跳一次,我讓他們建立這樣它將從1到顯示無論而不是0到任何 - 1

所以基本上我要重新繪製網格中的每個像素我動議,而不是每50認沽我不想每個像素遍歷屏幕

+0

將後臺繪製到後臺緩衝區,並根據需要渲染後臺緩衝區,渲染速度會更快 – MadProgrammer

+0

試圖讓移動的長層次對吧? –

+0

我不知道'長平'是什麼意思,但它在x和y軸上移動。 致MadProgrammer:讓我解釋一下這個過程。它貫穿每個貼磚,左側是6個瓷磚,右側是9個,頂部是5個,底部是8個,瓷磚的大小是50px,所以每50xp只能繪製一個瓷磚...我需要繞過那。我不認爲後臺緩衝區將工作 – zfollette

回答

0

好上,在首先你對背景和網格感到困惑。網格是檢查碰撞的一種方法,也是一種永不移動的空間分區算法。背景是在每個級別的遊戲中的每個實體後面繪製的圖像。

你所要做的就是按照我所理解的水平滾動。爲此,我們創建了一個名爲View的類,也稱爲Camera,它通過將由玩家控制的實體居中並繪製背景和可見實體。

並且爲一個實體居中並繪製地圖,我使用這些類。希望你明白我用C#編寫它們。

這裏是我實施Grid。我有相同的類here的java版本,但我沒有在java中實現Grid類。

你可以閱讀我的教程Using Grids For Collisions瞭解更多關於它是如何工作的信息。希望能幫助到你。