反对一个int

时间:2014-07-18 04:00:20

标签: java android performance

我还有另外一个问题。我有一个基于平铺的游戏,我也有这个撤消功能。 "推动撤消"功能需要反转移动的方向(4路)。

所以我的方向是0 =向上,1 =向右,2 =向下,3 =向左 我需要最简单/最有效的方法来反转这一点 这就是我想出的:

private void pushToUndo(int x, int y, int direction) {
    int[] args = {x,y,direction};
    int opDir = 0;

    if(direction == 0) opDir = 2;
    else if(direction == 1) opDir = 3;
    else if(direction == 2) opDir = 0;
    else if(direction == 3) opDir = 1;
    args[2] = opDir;
    undoMove = args;
    undoUsed = false;
    undoButton.setEnabled(!undoUsed);
}

有人知道更有效的方式来获得" opDir"(方向相反)?

2 个答案:

答案 0 :(得分:3)

一个简单的数学公式将解决您的问题

int direction;

int op = (direction + 2) % 4;

因此direction的相反方向将是op

例如

direction = 0 - > op = (0 + 2) % 4 = 2;

direction = 1 - > op = (1 + 2) % 4 = 3;

direction = 2 - > op = (2 + 2) % 4 = 0;

direction = 3 - > op = (3 + 2) % 4 = 1;

答案 1 :(得分:3)

方向的二进制表示是

0: 00
1: 01
2: 10
3: 11

您需要一种在00< - >之间切换的方法。 10和01< - > 11.这相当于反转第二位,相当于2位的按位xor 将您的代码更改为:

opDir = 2 ^ direction;

计算单个按位操作非常有效。但是,您可能不需要对此进行性能调整,除非您每秒调用该方法数千次。如果您认为其他效率稍低的代码更容易理解,您可以使用它来提高可维护性,而且性能损失可以忽略不计。