2012-12-28 47 views
0

幾個月前,當我製作二維背景滾動遊戲時,我需要製作一個背景循環,使其看起來像遊戲角色正在移動,所以我使用以下算法循環背景 - >遊戲背景滾動/循環算法

int w=backgroundImage.getWidth(); 
    int h=backgroundImage.getHeight(); 
    int desX,desY; 

    for(int x=0;x<w;x++) 
    { 
     for(int y=0;y<h;y++) 
     { 
      int px=backgroundImage.getRGB(x, y); 

      desX=x-2; 
      desY=y; 


      if(desX<0) 
      { 
       desX=w+desX-1; 

      } 

      backgroundImage.setRGB(desX, desY, px); 
     } 



    } 

但應用此算法循環整個背景後,我發現整個遊戲變得緩慢。

這個算法有什麼好處,或者有更好的循環背景算法嗎?

任何代碼片斷將不勝感激。
謝謝。

+0

這是在一個單獨的線程? – drum

+0

是的,是的。 @drum –

+0

這是什麼語言? Java的?什麼類型是backgroundImage?我的建議是使用大小爲(寬* 2)的圖像(可能位於面板或其他位置),並且只是移動圖像的座標,而不是混淆像素。 – Dukeling

回答

1

根據使用的語言,此方法很容易導致您注意到的性能下降。我建議使用背景圖像的繪製偏移量,而不是嘗試更改原始像素數據本身。

首先,製作比遊戲視口寬的背景圖片。在每個更新週期中,將圖像移動x個像素(x取決於您想要描繪的移動速度)。

另外,我們假設您將BG移動到左側。隨着您繼續向左移動,圖像的右邊將進入視口,並且您會注意到從視口右邊緣擴展的黑色帶。爲了防止這個神器,你需要並排繪製兩幅背景圖像。

此外,爲了使它看起來無縫無縫,你必須明確地設計BG圖像來平鋪。正如您所預料的那樣,這種方法將比現有的代碼片段快得多。