我还有另外一个问题。我有一个基于平铺的游戏,我也有这个撤消功能。 "推动撤消"功能需要反转移动的方向(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"(方向相反)?
答案 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;
计算单个按位操作非常有效。但是,您可能不需要对此进行性能调整,除非您每秒调用该方法数千次。如果您认为其他效率稍低的代码更容易理解,您可以使用它来提高可维护性,而且性能损失可以忽略不计。