我目前正在研究java中的平台游戏,我无法弄清楚为什么这会降低性能。只渲染相机视图中的纹理,我甚至尝试清除相机视图外的所有对象,这样阵列几乎是空的,我仍然无法获得良好的帧速率。当我注释掉这个方法的调用时,游戏运行速度为300 FPS,但是当我运行它时,即使我删除了所有后续文字,我仍然只能获得40 FPS。这不是渲染的问题,因为我已经彻底测试了这一点。任何反馈都将非常感激。这是代码:
public void buildTerrain(BufferedImage bi) {
// this method will take an image and build a level based on it.
int width = bi.getWidth();
int height = bi.getHeight();
for(int x = 0; x < width; x++){
for(int y = 0; y < height; y++){
int pixel = bi.getRGB(x, y);
int r = (pixel >> 16) & 0xff;
int g = (pixel >> 8) & 0xff;
int b = (pixel) & 0xff;
if(r == 255 &&
g == 255 &&
b == 255)
h.addObject(new Block(x*32, y*32,
ID.blockStone,GameState.level1, tex));
if(r == 0 &&
g == 0 &&
b == 255){
p.setX(x*32);
p.setY(y*32);
p.setHeight(64);
}
}
}
}
的引用: h是一个Handler对象,包含一个方法addObject(GameObject) Block扩展了GameObject p是一个玩家,女巫也扩展了GameObject。
编辑:此代码不在循环中调用,它在每个级别的开头运行一次以加载地形。所有AddObject()方法都将块添加到数组中,然后在tick()和render()方法中迭代。仅渲染摄像机范围内的对象,并且块的tick()方法为空。
答案 0 :(得分:0)
你可以尝试一下:
if(0xffffff00 == (pixel & 0xffffff00))
h.addObject(new Block(x*32, y*32,
ID.blockStone,GameState.level1, tex));
if(0x0000ff00 == (pixel & 0x0000ff00)){
p.setX(x*32);
p.setY(y*32);
p.setHeight(64);
}
因为我不了解为每个像素分解(r,g,b)的必要性,而你可以使用二进制&
(0xffffff00,它可能是0x00ffffff)。
width*height*(3 shift + 3 and + 3 equals + 3 equals)
次操作。width*height*2*(and + test)
次操作。