我想为要掷出的骰子设置动画,但不想使用Morph>>step
方法,因为我想更好地控制掷出的时间。我知道可以在派生的块中使用Delay>>wait
来查看动画,但是如何从其他方法中调用此方法以确保获得最终的numberRolled
呢?
这是我的roll
方法:
roll
| n t |
numberRolled := nil.
[
t := 10 + (10 atRandom).
t timesRepeat: [
n := 6 atRandom.
self showNumber: n.
(Delay forSeconds: 0.1) wait.
].
numberRolled := n.
] fork.
因此,如果我从类似
guessLower
的方法调用此方法,则roll
方法会立即返回,因为实际工作是在分支过程中完成的。guessLower
previousNumberRolled := numberRolled.
self roll.
"this next line is called before the dice has finished rolling"
self checkWin: (numberRolled < previousNumberRolled)
我当前的解决方案是修改
roll
方法以获取一个块,该块在滚动完成后执行,例如rollAndThen: aBlock
但有没有更优雅/更简单的解决方案? 最佳答案
在Morphic中,使用延迟和显式循环确实是个坏主意。
但是使step方法做您想要的事情真的很简单:在内部,您只需检查它是否应该继续滚动。然后,您执行self stopStepping. self checkWin: ...
。