我怎样才能在java中正确执行二进制switch语句?

时间:2015-05-07 04:09:32

标签: java arrays list libgdx switch-statement

我正在开发游戏,我需要将我的二进制tile id设置转换为switch语句,这样我就可以从精灵表中获取正确的tile。

我需要将包含我需要的所有可能图块的列表从255转换为大约48个左右的图块转换为一个整数,我可以使用它来获取我的图块ID。

我可以在开始此声明时获得一些帮助吗?

x也表示在那里设置的位并不重要。

编辑:还应该说这是一个8位数字DCBA4321

enter image description here

3 个答案:

答案 0 :(得分: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, 
    ...
};

有了这样的数组,您可以使用按位移位简单地加入DCBA和4321值并添加并将其映射到值。这对我来说似乎是最快的方法

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

答案 1 :(得分: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);
  }
}

一旦屏蔽了该值,就可以确定要抓取的正确图块。

答案 2 :(得分:1)

除非您有从app_kios到目标值的数学公式,否则您必须执行以下操作。我已将其分为子部分以帮助支持可读性和维护。

dcba4321