我想设置一个正在滚动的骰子,但不想使用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
但是有更优雅/更简单的解决方案吗?
答案 0 :(得分:1)
在Morphic中,使用延迟和显式循环是一个非常糟糕的想法。
但是让步骤方法做你想做的事情真的很简单:在里面你只需检查它是否应该继续滚动。然后你做self stopStepping. self checkWin: ...
。