gpt4 book ai didi

Java - 为什么我的平台游戏性能如此低?

转载 作者:行者123 更新时间:2023-12-02 08:51:55 25 4
gpt4 key购买 nike

我目前正在使用 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 扩展游戏对象p 是一个 Player,witch 也扩展了 GameObject。

编辑:此代码不是在循环中调用的,它在每个级别开始时运行一次以加载地形。 AddObject() 方法所做的就是将 block 添加到数组中,然后在 tick() 和 render() 方法中进行迭代。只渲染相机范围内的物体,blocks的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 and + 3 equals + 3 equals)操作。
  • 在我的代码中,您执行width*height*2*(和+测试)操作。

关于Java - 为什么我的平台游戏性能如此低?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35848590/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com