java - 策略游戏 map 加载算法中的性能相关问题(Java,lwjgl)

标签 java opengl lwjgl game-development

我正在创建一个游戏,你可以选择一个国家,并且必须管理它,但由于大量计算(缺乏性能),我无法找到一种加载 map 而不会使程序崩溃的方法。

我做了一个算法,循环遍历包含 map 省份(游戏中的空间单位)的图像的每个像素,每个像素都有自己的颜色,这样,当我遇到像素中尚未看到的颜色时,我知道这是一个新省份,因此我可以使用文件中的信息加载 new Province() 实例。

上面所说的一切都很好,几乎不需要时间,但是要在不同国家互相攻击时编辑 map ,我需要一种方法来单独渲染每个省份,并使用着色器为其赋予其国家颜色。

我添加了这段代码,用于获取当前像素位置并将其缩小到 openGL 坐标,将其保存在 arrayList (currVertices) 中,然后将其放入另一个 ArrayList 中一旦发现新省份,float[] 的 (provinceVertices) 。

(我知道代码并不漂亮,而且我也不是专业程序员(而且我才 14 岁),所以请尽量友善地告诉我我做错了什么, 我尝试过每 4 个像素存储一个顶点以使列表更小,但它仍然崩溃)

List<Float> currVertices = new ArrayList<Float>(); // the vertices of the current province          
for (int y = 0; y < worldImage.getHeight(); y++) {
    for (int x = 0; x < worldImage.getWidth(); x++) {
        if (!currColors.contains(worldImage.getRGB(x, y))) {
            if (!currVertices.isEmpty())
                provinceVertices.add(Utils.toFloatArray(currVertices)); // store the current province's vertices into the total database
            currVertices.clear();
        }
        if (x % 4 == 0)
            currVertices.add((float) (x) / EngineManager.getWindowWidth());
        if (y % 4 == 0)
            currVertices.add((float) (y) / EngineManager.getWindowHeight());
    }
}

我只包含了代表顶点加载的代码

public static float[] toFloatArray(List<Float> list) {
    float[] array = new float[list.size()];
    ListIterator<Float> iterator = list.listIterator();
    while (iterator.hasNext()) {
        array[iterator.nextIndex()] = list.get(iterator.nextIndex());
    }
    return array;
}

目标是让第二个ArrayList按正确的顺序排列所有顶点,但是当我尝试将currVertices添加到provinceVertices 游戏只是崩溃,没有错误消息,这就是为什么我猜测问题与性能相关。 (顶点可以很好地加载到 currVertices 列表中)

最佳答案

使用 nextIndex() 不会增加索引。尝试改用:

while (iterator.hasNext()) {
    array[iterator.nextIndex()] = iterator.next();
}

关于java - 策略游戏 map 加载算法中的性能相关问题(Java,lwjgl),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57594085/

相关文章:

java - LibGdx Java 中近乎完美的碰撞

opengl - 如何在四边形的正面和背面设置不同的颜色

java - OpenGL 顶点着色器不工作

java - 为什么 lwjgl 不绘制矩形?

java - 在长 Scala 列表或 Stream 上进行 reduce() 操作期间,Java JVM 关于 GC 的智能程度如何?

java jsonobject "value"和 "num"

java - 在实体、DTO 包上禁用 Sonar 重复

opengl - glCopyTexImage2D 将其像素保存到哪里?

python - 将纹理映射到四边形 opengl 和 pyglet

Java-Slick2D 平铺 map 碰撞失败