如何在不使用步骤的情况下为变形设置动画?

时间:2014-03-23 23:29:33

标签: smalltalk squeak

我想设置一个正在滚动的骰子,但不想使用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但是有更优雅/更简单的解决方案吗?

1 个答案:

答案 0 :(得分:1)

在Morphic中,使用延迟和显式循环是一个非常糟糕的想法。

但是让步骤方法做你想做的事情真的很简单:在里面你只需检查它是否应该继续滚动。然后你做self stopStepping. self checkWin: ...