Самый эффективный для кода способ назначения текстур на основе условий var ios? - PullRequest
0 голосов
/ 06 апреля 2020

Я сейчас программирую игру, используя собственный движок. Однако есть проблема, и я не уверен, как решить ее наиболее эффективно с точки зрения кода: для большого количества объектов в игре мне нужно назначить разные текстуры на основе различных условий / состояний (для этого я использую перечисления). Пример:

Игрок должен изменить свою текстуру в зависимости от направления, на которое он смотрит, идет ли он или ждет, его состояния здоровья и т. Д. c.

Одно решение может быть вложенными выражениями-переключателями, такими как:

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:
            ...
    }

Но это усложняется с каждым условием, и мне пришлось бы переписать его, если бы был немного другой набор состояний (например, я бы реализовал Зомб ie, и он не мог работать или имел бы дополнительные свойства и т. Д. c.).

Я также подумал о том, чтобы присвоить все мои теги текстур и написать алгоритм, который пытается найти подходящую текстуру, но с большим количеством и больше текстур / условий, и все это выполняется очень часто, я думаю, что этот подход будет чрезвычайно медленным.

Я действительно не знаю, что делать, или если мне не хватает каких-либо структур данных, которые обращаются к этим видам проблемы и являются и эффективными в коде и производительными.

1 Ответ

1 голос
/ 06 апреля 2020

Я не уверен, что это сделает его более эффективным, но это определенно сделает его более устойчивым к будущим изменениям: я думал о чем-то вроде справочной таблицы. Это может быть многомерный массив или даже ваша собственная структура данных.

Вы можете кодировать свои состояния и направления в виде целых чисел, например,

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 или подобное ( например, когда вы не хотите, чтобы текстура была установлена ​​в определенной комбинации состояния-направления), но я думаю, что она будет выглядеть лучше и сделает ее более устойчивой к будущим изменениям.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...