2015-05-07 3 views
0

Я работаю над игрой, и мне нужно преобразовать свой идентификатор бинарной плитки в оператор switch, чтобы я мог захватить правильную плитку из листа спрайтов.Как я могу правильно выполнить оператор двоичного переключателя в java?

Мне нужно преобразовать этот список, который содержит все возможные плитки, которые мне нужны, от 255 до 48 или около того. Плитки в целое число, которое я могу использовать для получения идентификатора моей плитки.

Могу ли я получить помощь при запуске этого заявления?

Также х означает, что не имеет значения, какой бит установлен там.

EDIT: Следует также сказать, что это 8 битное число DCBA4321

enter image description here

ответ

2

Я бы рекомендовал создать статический массив из 256 значений для каждой возможной комбинации, как это:

static final int[] DCBA4321_TO_VALUE = { 
    // 0000 
    47, 44, 36,343, 37, 14, 35, 32, 45, 34, 15, 40, 42, 41, 33, 38, 
    // 0001 
    28, 28, 27, 27, 26, 26, 23, 23, 28, 28, 27, 27, 26, 26, 23, 23, 
    // 0010 
    21, 21, 21, 21, 24, 24, 24, 24, 16, 16, 16, 16, 30, 30, 30, 30, 
    // 0011 
    1, 1, 1, 1, 3, 3, 3, 3, 1, 1, 1, 1, 3, 3, 3, 3, 
    ... 
}; 

Имея такой массив, который вы можете просто присоединиться к вашей ДХБС и 4321 значений с помощью побитового сдвига и добавить и отобразить его оценивать. Это, кажется, самый быстрый подход для меня

int getValue(int DCBA, int num) { 
    return DCBA4321_TO_VALUE[(DCBA << 4)+num]; 
} 
+0

Выглядит интересно и выглядит очень быстро. Таким образом, следующая строка в жестко закодированных значениях будет 21 21 24 24 16 16 30 30? Как насчет следующей строки? 1 1 1 1 3 3 3 3? – Snhp9

+0

Добавил еще две строки ответа. У вас есть удобный столбец «Нижний бит», который дает подсказку, значения 4321 которой должны быть сопоставлены с целевым значением. Например, «0-3, 8-11» означает, что в строке должно быть 8: в позициях 0-3 и в позициях 8-11. –

+0

Делает совершенным с тех пор спасибо! Я собираюсь попробовать этот и другой метод и посмотреть, как это получается. – Snhp9

1

Я бы рекомендовал вам изучить операторы побитового в Java: Click Here

class BitDemo { 
    public static void main(String[] args) { 
    int bitmask = 0x000F; 
    int val = 0x2222; 
    // prints "2" 
    System.out.println(val & bitmask); 
    } 
} 

После того, как вы замаскированы значение , вы можете определить правильную плиту для захвата.

+0

Должен ли я использовать оператор switch? – Snhp9

1

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

byte dcba = dcba4312 & 0b11110000 >> 4 
byte _4321 dcba4321 & 0b00001111; 

switch (dcba) { 
case 0b0000: 
    return dcba0(_4321); 
case 0b001: 
    return dcba1(_4321); 
... 
    rest of the dcba cases; 
... 
} 

dcba0(byte _4321) { 
    switch (_4321) { 
    case 0: 
     return 47; 
    case 1: 
     return 44; 
    .... 
     rest of the cases 
    .... 
    } 
} 

.... 
rest of the dcbaX methods 
.... 
+0

Я попробую сделать это и пару ниже и проверить производительность. Потому что кажется, что есть много способов сделать это. Многому учатся в этом. :) – Snhp9

Смежные вопросы