2016-07-19 177 views
1

我最近開始在java中使用2d平臺遊戲,並且詢問性能相關問題。Java平臺遊戲性能

在我的遊戲中,我有一個世界(現在比較小)。但是我仍然在繪製整個世界(甚至看不見的部分),但是超過一半以上的世界對於玩家相機是不可見的。

以下是我現在正在做的事情。

@Override 
public void paintComponent(Graphics g){ 
    g.translate(player.camX(), player.camY()); 

    for (GameObject gameObject : solidObjects){ 
     if (gameObject.isTouching(player.getCameraRect())) 
      gameObject.paint(g); 
    } 

    player.paint(g); 

    for (GameObject gameObject : unSolidObjects){ 
     if (gameObject.isTouching(player.getCameraRect())) 
      gameObject.paint(g); 
    } 

} 

所以問題是,如果if語句在繪畫之前檢查它是否會更快?

回答

1

是的。

做一個檢查,看它是否在屏幕上應該不超過1或2個步驟。

繪畫的一切都需要你畫出每一個像素到屏幕上,不管它是否被使用。

1

如果gameObject.paint(g);涉及大量的繪圖調用,最有可能的分支(檢查)將比成本節省更多的工作。如果它只是一個圖形調用來繪製精靈,你的圖書館已經執行了這樣的檢查,以避免緩衝區溢出,你的將是多餘的。

也就是說,如果您在這裏面對性能問題,那麼我建議使用某種數據結構。一個簡單的一種是格像這樣:

enter image description here

當你的元素移動,從他們佔據網格單元中刪除,並將其插入到新的(),他們佔據。如果你有效地實現這個,那應該只涉及操縱一些整數。

然後,當您想要在屏幕上繪製元素時,只繪製重疊網格單元中的元素。這會阻止你循環遊戲世界中的每一個元素。如果需要,這對於加速碰撞檢測也很方便。

四叉樹是一種替代方法,但更新成本稍高一點,但如果遊戲中的元素分佈不均勻,它可以提供更好的搜索質量。