我遇到了一个基本代码的问题,它在屏幕上以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