簡體   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