我想为要掷出的骰子设置动画,但不想使用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: ...

09-26 09:12