Lambda外部的布尔开关

我正在用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.

    }

}

试图更改为原子数组或单元素数组,但这无法完成工作,因为用户正在玩的“地图”具有多个可能的移动方向(因此不会阻塞所有方向)。


而仅仅通过放心地将moveMade = true放在上面而出现的错误将引起“ lambda表达式中的变量应该是最终的或实际上是最终的”。


扬帆大鱼
浏览 176回答 2
2回答

桃花长相依

如果要访问和修改lambda表达式中的变量,请将其定义为类/实例变量。有一个真正的症结所在,您不应该排除该错误。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);    }} 

守候你守候我

使用java.util.concurrent.atomic.AtomicBoolean实用程序类。它们持有对值的原子线程安全引用。import java.util.concurrent.atomic.AtomicBoolean;// Outside of lambda, instantiate the atomic boolean referenceAtomicBoolean ref = new AtomicBoolean(); // Constructor parameter optional: empty (false) / true / false// Inside lambda, use the getters and settersref.set(true); // or: ref.set(false);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java