1

我正在smalltalk中制作一个带有使用计时器的小游戏。每秒出现一个对象,游戏持续 10 秒。如果我运行一个 while 循环 10 秒,我无法捕获来自控制器的任何输入以及将其显示在视图中。所以我创建了一个新进程,但是如果我按原样 fork 它,run 方法的优先级太高,其他方法没有机会运行。有一个更好的方法吗?

编辑:

我在 49 分叉了 run 方法,控制器和视图工作,但只有当我在视图上方移动鼠标时。

4

2 回答 2

1

您可以分叉一个进程,但您希望通过常规窗口事件队列来处理它。尝试这样的事情:

tick
   self doStuff.
   self gameFinished ifFalse: [
      [(Delay forSeconds: 1) wait.
         [self tick] uiEventFor: self builder window] fork]
于 2012-11-21T03:26:20.510 回答
0

恕我直言,分叉一个流程并不是解决这个问题的一个好的设计决策。我宁愿做一个动作队列,当需要执行动作时,你可以在其中放置带有时间戳的动作。然后在游戏主循环的每个循环中,您删除所有到期的操作,并处理它们。

例如,对于每秒生成的对象,您将在未来 1 秒内添加一个动作,并且在处理该动作时,它会在未来 1 秒内再次添加相同的动作。

与我们尝试使用并发进程相比,这将使您的游戏更具可预测性和可调试性。

于 2012-11-19T14:32:05.553 回答