Squeak Smalltalk:游戏循环

Hig*_*aru 6 smalltalk squeak morphic

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

while true:
  handle events like keyboard input
  update game world
  draw screen
  (optional: delay execution)
Run Code Online (Sandbox Code Playgroud)

虽然这远非最佳,但它应该足够简单的游戏.

你是怎么在Squeak Smalltalk做到这一点的?

我可以阅读键盘输入并对其做出反应,如wiki.squeak.org所述.但是,如果我尝试执行类似的东西

1 to: 10 do: [ :i | game updateAndDraw ]
Run Code Online (Sandbox Code Playgroud)

所有事件只在循环执行后才被处理.

Ber*_*erg 7

Morphic已经提供了主循环.它在MorphicProject class>>spawnNewProcess:

uiProcess := [
    [ world doOneCycle.  Processor yield ] repeat.
] newProcess ...
Run Code Online (Sandbox Code Playgroud)

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

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

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