java - 根据各种条件分配纹理的最高效的代码方式?

标签 java performance game-development coding-efficiency

我目前正在使用自己的引擎编写游戏。但是,有一个问题,我不确定如何以最高效的代码方式解决它: 对于游戏中的很多对象,我需要根据不同的条件/状态分配不同的纹理(我为此使用枚举)。一个例子:

玩家需要根据他所看的方向、他是在行走还是在等待、他的健康状况等来改变其纹理。

一种解决方案是嵌套 switch 语句,如下所示:

switch (getState ()) {
        case IDLE:
            switch (getDirection()) {
                case UP:
                    setTexture(Textures.PLAYER_IDLE_UP);
                    break;
                case RIGHT:
                    setTexture(Textures.PLAYER_IDLE_RIGHT);
                    break;
                case DOWN:
                    setTexture(Textures.PLAYER_IDLE_DOWN));
                    break;
                case LEFT:
                    setTexture(Textures.PLAYER_IDLE_LEFT);
                    break;
            }
            break;
        case WALKING:
            switch (getDirection()) {
                case UP:
                    setTexture(Textures.PLAYER_WALKING_UP);
                    break;
                case RIGHT:
                    setTexture(Textures.PLAYER_WALKING_RIGHT);
                    break;
                case DOWN:
                    setTexture(Textures.PLAYER_WALKING_DOWN);
                    break;
                case LEFT:
                    setTexture(Textures.PLAYER_WALKING_LEFT);
                    break;
            }
            break;
        case RUNNING:
            ...
    }

但是对于每个条件,这都会变得越来越复杂,如果有一组稍微不同的状态,我将不得不重写它(例如,我将实现一个僵尸,他无法运行或将具有附加属性等) .

我还考虑过给出所有纹理标签并编写一个算法来尝试找到匹配的纹理,但随着越来越多的纹理/条件,并且所有这些都经常执行,我认为这种方法会非常慢。

我真的不知道该怎么做,或者我是否缺少任何解决此类问题并且代码高效且高性能的数据结构。

最佳答案

我不确定它是否会提高效率,但它肯定会使其对于 future 的变化更加稳健: 我正在考虑类似查找表的东西。这可以是多维数组,甚至是您自己的数据结构。

您可以将状态和方向编码为整数,例如

public static final int IDLE = 0;
public static final int WALKING = 1;
...
public static final int UP = 0;
public static final int LEFT = 1;
...

然后假设您有一个包含所有纹理的二维数组。您可以使用 getState()getDirection() 方法作为数组的索引。所以你的代码可能会变得类似于:

setTexture(texture_array[getState()][getDirection()]);

当然,您必须在某个时刻将所有纹理硬编码到数组中,并且您可能必须将某些单元设置为 null 或类似的值(例如当您不希望纹理设置为某个状态方向组合),但我认为它看起来会更好,并且对于 future 的变化更加稳健。

关于java - 根据各种条件分配纹理的最高效的代码方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61067033/

相关文章:

java - java for windows 中的文件图标覆盖

java - 优化导入的原因是什么?

linux - blktrace 测量 IO 性能

math - 乒乓球值随着时间的推移而降低,以产生闪烁效果

rust - Rust 中的动态类型实体组件系统

javascript - 我的 NodeJS promise 代码竞争条件安全吗?

java - 多线程java程序交替打印偶数和奇数

performance - knockout.js 和最快的模板引擎

database - RDBM - 一对一 -> 检查条目是否存在并插入/更新或始终删除并仅插入?

Java资源泄漏