所以我用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;
}
}
发布于 2019-08-09 18:28:41
事件变量(mousePressed
、keyPressed
等)在对函数的调用之间进行更新。
换句话说:在对draw()
函数的调用中,mousePressed
函数将永不更改()。如果希望更新事件变量,则需要让draw()
函数完成,然后再次调用。
在幕后,这是因为处理是单线程的。(这是设计出来的,因为多线程UI程序是一场噩梦。)
退一步说,您可能不希望在draw()
函数中包含一个长循环。取而代之的是利用通过处理实现的60 FPS循环。
https://stackoverflow.com/questions/57422393
复制相似问题