6

在许多语言中,您可以执行以下操作:

while true:
  handle events like keyboard input
  update game world
  draw screen
  (optional: delay execution)

虽然这远非最佳,但对于简单的游戏来说应该足够了。

你如何在 Squeak Smalltalk 中做到这一点?

我可以阅读键盘输入并按照wiki.squeak.org上的说明对其做出反应。但是,如果我尝试执行类似

1 to: 10 do: [ :i | game updateAndDraw ]

所有事件仅在循环执行后才被处理。

4

3 回答 3

7

Morphic 已经提供了那个主循环。它在MorphicProject class>>spawnNewProcess

uiProcess := [
    [ world doOneCycle.  Processor yield ] repeat.
] newProcess ...

如果你深入doOneCycle研究你会发现它

  • (可选)延迟(interCyclePause:
  • 检查屏幕调整大小
  • 处理事件
  • 处理step方法
  • 重新展示世界

您的代码应该通过添加鼠标/键盘事件处理程序、动画的步骤方法和重新显示的绘制方法来挂钩这些阶段。所有这些都应该是您自己的游戏变形中的方法。您可以在整个系统中找到示例。

于 2017-05-11T23:00:43.170 回答
0

执行固定次数的操作:

10 timesRepeat: [game updateAndDraw]

使用while语义:

i := 5
[i > 0] whileTrue: [
  i printNl.
  i := i - 1.
]

要使用 while 语义创建一个永久循环,

[true] whileTrue: [something do]
于 2017-05-15T03:31:38.073 回答
0

Object >> #when:send:to:您应该能够通过使用message来利用 Morphic 事件循环。

于 2017-09-08T18:52:28.050 回答