所以我用 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;
}
}
最佳答案
事件变量(mousePressed
、keyPressed
等)在 调用 draw()
之间更新> 功能。
换句话说:mousePressed
函数在调用 draw()
函数时永远不会发生变化。如果您希望更新事件变量,您需要让 draw()
函数完成,然后再次调用。
在幕后,这是因为处理是单线程的。 (这是设计使然,因为多线程 UI 程序是一场噩梦。)
退一步来说,您可能不想在 draw()
函数中包含长循环。利用由Processing 实现的60 FPS 循环。
关于Java/处理 mousePressed 在循环中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57422393/