Java-为什么我的platformer游戏的性能这么低?
我目前正在用java开发一个platformer游戏,我很难弄清楚为什么这会大大降低性能。只渲染相机视图中的纹理,我甚至尝试清除相机视图之外的所有对象,因此阵列几乎为空,我仍然无法获得良好的帧率。当我对这个方法的调用进行注释时,游戏以300 FPS的速度运行,但是当我运行它时,即使我删除了所有的后记,我仍然只能以40 FPS的速度运行。这不是渲染的问题,因为我已经对此进行了彻底的测试。如有任何反馈,将不胜感激。代码如下:Java-为什么我的platformer游戏的性能这么低?,java,performance,Java,Performance,我目前正在用java开发一个platformer游戏,我很难弄清楚为什么这会大大降低性能。只渲染相机视图中的纹理,我甚至尝试清除相机视图之外的所有对象,因此阵列几乎为空,我仍然无法获得良好的帧率。当我对这个方法的调用进行注释时,游戏以300 FPS的速度运行,但是当我运行它时,即使我删除了所有的后记,我仍然只能以40 FPS的速度运行。这不是渲染的问题,因为我已经对此进行了彻底的测试。如有任何反馈,将不胜感激。代码如下: public void buildTerrain(BufferedImag
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);
}
}
}
}
public void buildTerrain(buffereImage bi){
//此方法将获取图像并在此基础上构建标高。
int width=bi.getWidth();
int height=bi.getHeight();
对于(int x=0;x>16)&0xff;
int g=(像素>>8)&0xff;
int b=(像素)&0xff;
如果(r==255&&
g==255&&
b==255)
h、 添加对象(新块(x*32,y*32,
ID.blockStone,GameState.level1,tex);
如果(r==0&&
g==0&&
b==255){
p、 setX(x*32);
p、 setY(y*32);
p、 设置高度(64);
}
}
}
}
参考资料:
h是一个处理程序对象,它包含一个方法addObject(GameObject)
块扩展游戏对象
p是玩家,巫婆也扩展了游戏对象
编辑:此代码不是在循环中调用的,它在每个关卡开始时运行一次以加载地形。AddObject()方法所做的就是将块添加到数组中,然后在tick()和render()方法中对其进行迭代。仅渲染摄影机范围内的对象,并且块的tick()方法为空。是否可以尝试:
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和+3等于+3等于)
- 在我的代码中,您执行
操作width*height*2*(and+test)