繁体   English   中英

Squeak Smalltalk:游戏循环

[英]Squeak Smalltalk: Game loop

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

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 ]

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

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

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

如果你深入了解doOneCycle你会发现它

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

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

要执行固定次数的操作:

10 timesRepeat: [game updateAndDraw]

while语义上使用:

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

使用语义创建永久循环,

[true] whileTrue: [something do]

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM