Java/处理 mousePressed 在循环中不起作用

标签 java processing event-dispatch-thread

所以我用 Java +Processing 制作了一个简单的游戏,其中在 draw() 中有按钮和循环。显然,如果存在循环,PApplet 函数 mousePressed() 不会持续工作,因此我尝试在循环期间检查我自己的 checkmouse() 函数。然而,它仍然不起作用。我该如何制作才能使用 while 循环运行游戏并同时不断检查 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");
    }
}

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

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

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

最佳答案

事件变量(mousePressedkeyPressed 等)在 调用 draw() 之间更新> 功能。

换句话说:mousePressed 函数在调用 draw() 函数时永远不会发生变化。如果您希望更新事件变量,您需要让 draw() 函数完成,然后再次调用。

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

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

关于Java/处理 mousePressed 在循环中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57422393/

相关文章:

java - JAX-RS HATEOAS 使用 Jersey,JSON 中不需要的链接属性

java - Vector.remove() for 循环

java - 从左上角绘制点击之间的绘制线

java - 贪吃蛇游戏 - 只绘制蛇的最大长度为 2

java - 获取和使用应用程序传递的 InputStream

java - Web 应用程序中的静态变量是否会导致内存泄漏(从角度来看是 OutOfMemory)?

java - 使用 Ajax 调用将 Cordova 9 移动应用程序连接到 Java Web 服务

java - 如何为Java编写conf文件?

java - 应该从事件调度程序还是主线程控制 Swing GUI 应用程序?

java - 小程序中的 start() 方法删除面板