我正在用JavaFX开发游戏。它几乎完成了,但是我遇到了移动检测问题,无法想到简单的解决方案。可能有,但我只是不知道
很显然,两者之间有更多的代码,但我着重指出了有问题的部分。
int finalX = x;
int finalY = y;
boolean jumpMade = false;
boolean moveMade = false;
// Mouse Controller
board[x][y].setOnMouseClicked(event -> {
if (!moveMade) {
move(finalX, finalY, selectedMarbleX, selectedMarbleY, selectedMarbleColor);
// Here I would want to make moveMade = true;
// To block further possibility of moving.
}
}
试图更改为原子数组或单元素数组,但这将无法完成任务,因为用户正在玩的“地图”具有多个可能的移动方向(因此不会阻塞所有方向)。 / p>
仅仅通过随意放置moveMade = true出现的错误就会出现“ lambda表达式中的变量应该是最终的或实际上是最终的”。
答案 0 :(得分:0)
如果要访问和修改lambda表达式中的变量,请将其定义为类/实例变量。 There is a genuinely crux reason for the error you shouldn't rule out.
Gobbledygook还是一个简单的例子,
interface Q {
void fun();
}
class ABC {
public static boolean x = false; // class variable
public static void b(Q q) {
q.fun();
}
public static void main(String[] args) {
Q a = () -> {
System.out.println("run simple lambda");
x = true;
};
b(a);
System.out.println(x);
}
}
答案 1 :(得分:0)
使用TForm
实用程序类。它们持有对值的原子线程安全引用。
java.util.concurrent.atomic.AtomicBoolean