我想要实现的内容类似于在Windows中要求确认的消息框。显示“消息”框时,将阻止调用它的代码,直到用户单击“是”或“否”。 我想做同样的事情,但消息框不够灵活。
我正在开发一个简单的游戏,因此我试图避免特定于语言的解决方案(一种仅适用于一种编程语言的解决方案)。通过这种方式,我可以将游戏移植到不同的平台,如iphone,windows,mac ...等,而不需要对代码设计进行太多改动。
给出一个伪代码示例并假设我有一个数组:
for(int i = 0; i< 5; i ++)
{
...
显示类似消息框的UI组件的代码。 ==>这里代码应该等到用户从UI组件中选择“是”或“否”
}
我尝试了以下解决方案:
bool userClickedYesOrNo = false;
for(int i = 0; i< 5; i ++){
...
显示类似消息框的UI组件的代码。 ==>代码执行未被阻止
while(userClickedYesOrNo == false){
//当用户点击UI中的是/否时,userClickedYesOrNo变为真实
的}
}
不幸的是,在Windows中,如果我使用while循环,那么UI将被冻结,用户将无法与其进行交互。
答案 0 :(得分:1)
大多数不使用线程但希望以交互方式运行的代码都基于事件。
例如,Java SWT应用程序中的标准“display loop”设置所有图形组件,然后进入无限循环。同样,网页上的JavaScript只有一个线程,因此必须注册timer events等处理程序,以便与正在进行的后台处理一起处理交互。
在主循环中,代码会检查是否有待处理的作业,如果是,则运行该作业。
在你的游戏中,你可以通过“更新”工作来做这样的事情,该工作每0.5秒(比如说)更新游戏状态并由计时器触发。弹出对话框时,可以设置一个标记为“暂停”的标志,以便更新事件只返回而不是做任何工作。这允许GUI事件继续由显示循环处理,当单击按钮时,可以删除暂停标志,允许游戏继续。