【问题标题】:Java/Processing mousePressed in loop not workingJava/Processing mousePressed in loop 不工作
【发布时间】:2019-08-11 07:40:31
【问题描述】:

所以我用 Java + Processing 制作了一个简单的游戏,其中 draw() 中有按钮和循环。显然,如果存在循环,PApplet 函数 mousePressed() 不会持续工作,因此我尝试在循环期间检查自己的 checkmouse() 函数。但是,它仍然不起作用。如何做到这一点,以便我可以运行带有 while-loops 的游戏并同时不断检查 mousePressed?

//draw() func
public void draw() {

    for (int i = 0; i < 10000; i++) {    //to simulate a while loop
        //do something, like run some other functions that create the buttons
        checkmouse();
    }
}

//checkmouse function
public void checkmouse() {

    if (mousePressed) {
        System.out.println("x");
    }
}

当我在处理窗口中单击鼠标时,即使 checkmouse() 每次循环都会运行,它也不会显示“x”,因此理论上它应该在循环运行时不断检查它。

还有人可以解释为什么这不起作用吗?

boolean esc = false;
while (!esc) {
    if (mousePressed) {
        System.out.println("x");
        esc = true;
    }
}

【问题讨论】:

标签: java processing event-dispatch-thread


【解决方案1】:

事件变量(mousePressedkeyPressed 等)在 调用 draw() 函数之间更新。

换句话说:mousePressed 函数将永远在对 draw() 函数的调用中发生变化。如果要更新事件变量,则需要让draw() 函数完成,然后再次调用。

在幕后,这是因为处理是单线程的。 (这是设计使然,因为多线程 UI 程序是一场噩梦。)

退后一步,您可能不想在draw() 函数中包含一个长循环。改为利用由 Processing 实现的 60 FPS 循环。

【讨论】:

    猜你喜欢
    • 2018-11-08
    • 2023-03-23
    • 2022-12-01
    • 2016-03-11
    • 2016-12-20
    • 1970-01-01
    • 2019-01-01
    • 1970-01-01
    • 2015-02-14
    相关资源
    最近更新 更多