現在,我從一個二維陣列char
加載我的地圖,當我加載超過100個塊(10x10區域)時,遊戲真的很慢。我只是在角色的一定距離內渲染塊。我也相信我知道爲什麼它運行得如此緩慢,但我不知道如何解決它。繼承人的代碼:二維陣列渲染距離 - 我的世界2D
public void renderBlocks(Graphics g) {
super.paint(g);
Graphics2D g2d = (Graphics 2D)g;
for(int x = 0; x < 50; x++) {
for(int y = 0; y < 50; y++) {
//blocks[x][y] tells it which type of block to load
Block next = new Block(blocks[x][y], x, y);
if((next.getX() - player.getX()) >= (-13*32) &&
(next.getX() - player.getX()) <= (13*32)) {
if((next.getY() - player.getY()) >= (-6*32) &&
(next.getY() - player.getY()) <= (6*32)) {
g2d.drawImage(next.getImage(), (next.getX() - player.getX()),
(next.getY() - player.getY()), this);
}
}
}
}
}
行:
Block next = new Block(blocks[x][y], x, y);
是什麼使得它運行很慢。儘管它沒有將它們繪製到屏幕上,但它仍然對blocks[x][y]
的所有元素設置Block next
等於new Block(blocks[x][y], x, y)
。問題是我不能刪除這行代碼,因爲它決定了距離角色有多遠來繪製塊。我需要這樣做,以便它僅設置等於正在繪製到屏幕上的塊[x] [y]的許多元素。
我試圖把:
if((x - player.getX()) >= (-13*32) && (x - player.getX()) <= (13*32)){
Block next = new Block(blocks[x][y], x, y);
...Rest of Code here
}
圍繞它與同爲y - playerY
,但它不工作,雖然在理論上它應該。
請回答這個問題,如果你知道一個方法來做到這一點,並使遊戲的運行速度與我從ArrayList加載塊時的速度一樣快,這使得我可以加載超過5000塊,並且運行良好FPS率。如果你需要遊戲的源代碼來幫助我解決這個問題,請評論你需要它,然後我會發布它。
'blocks'是塊類型的二維數組? – 2012-02-18 02:08:54