java - Java/Processing mousePressed in loop 不工作
问题描述
所以我在 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");
}
}
当我在处理窗口中单击鼠标时,即使 checkmouse() 每次循环都会运行,它也不会显示“x”,因此理论上它应该在循环运行时不断地检查它。
也有人可以解释为什么这不起作用?
boolean esc = false;
while (!esc) {
if (mousePressed) {
System.out.println("x");
esc = true;
}
}
解决方案
事件变量(mousePressed
、keyPressed
等)在函数调用之间更新。draw()
换句话说:mousePressed
函数在调用函数时永远不会改变draw()
。draw()
如果要更新事件变量,则需要让函数完成然后再次调用。
在幕后,这是因为处理是单线程的。(这是设计使然,因为多线程 UI 程序是一场噩梦。)
退后一步,您可能不想在draw()
函数中包含一个长循环。改为利用由 Processing 实现的 60 FPS 循环。
推荐阅读
- javascript - 在 django 中管理 js 库中的静态链接
- db2 - DB2 CLP 连接到远程数据库
- powerbi - PowerBI Embedded V2 Direct Query - Azure Sql 凭据未以编程方式更新
- jquery - 通过动态创建的输入 id 将值推送到数组中
- java - 如何从firebase实时数据库中检索列表?
- python - 使用 BeautifulSoup 进行 Web 抓取返回 NoneType
- javascript - JS:如何使用 parentElement 定位特定的父级
- javascript - 滚动时关闭下拉菜单
- spring - AuthenticationFailureHandler HttpServletResponse.sendError url
- php - 如何将 php 变量回显到 HTML 表单?