我遇到了一個基本代碼的問題,它在屏幕上以150x150的網格顯示一些動畫圖像。 (注意:是的,我知道圖像離開了屏幕的邊緣,但最終我打算根據需要縮放圖像以適合屏幕)。但是該程序只能以2 FPS運行,導致動畫有時無法工作。我的循環是目前的(在Java中)如下:如何使循環更有效?
for (int i = 0; i < 22; i++) {
for (int j = 0; j < 11; j++) {
g2d.drawImage(getImage(texture_Ocean,l),i*64,j*64,i*64+64,j*64+64,0,0,64,64,this);
}
}
而且的getImage:
public Image getImage(Image i, Long l) {
BufferedImage b = (BufferedImage) i;
int w = b.getWidth();
if (b.getHeight() % w == 0) {
int frames = b.getHeight()/w;
int frame = Math.round((l%1000)/(1000/frames));
System.out.println(frame);
return b.getSubimage(0,(int) (w*frame) ,w, w);
} else {
return texture_error;
}
}
我的問題是如何讓我的程序更高效/跑得快?我知道必須有辦法做到這一點,因爲你看到的遊戲,如監獄建築師和rimworld與300×300的話,並擁有實體hundreads。而像TF2這樣的遊戲在3D空間中顯示數以千計的多邊形。怎麼樣?
我不是一個計算機圖形專家,但我相當肯定你列出的遊戲的幀速率更快,因爲他們使用像OpenGL這樣的庫,直接與GPU的相關設備進行接口。 – kviiri
我對texture_Ocean沒什麼好感,但是如果你可以保存在一個靜態或成員變量中,並獲得寬度和高度,那麼你可以在每個迭代處保存一些好處理。 –
它可能不會有太大的改進,但是你可以緩存getImage,因爲它總是返回相同的結果,現在每個循環都進行內部計算。 – HamoriZ