はじめてのMorphicチュートリアル(第7回)「stepping」

今回は、前回作成したMyMorphを使って簡単なアニメーションを作成する。
Morphicではアニメーションを実現する仕組みとしてsteppingが用意されている。
steppingとは、一定の時間間隔でモーフにstepメッセージが送られるという簡単な仕組みのことである。
メインの動作とは別に、モニタした値を定期的に表示することなどが、新たなスレッドを使わずに実現できる。
stepというメソッドを実装すればsteppingを始めることができる。

step
    self color: Color random

第5回で説明したように、System BrowserでMyMorphを表示させ、initializeと同じ方法で上のstepメソッドをMyMorphに追加する。
Pharo2.0以降ならば、Acceptした瞬間からMyMorphの色がランダムに変わっていくのを観察することができる。
古いPharoやSqueakならば以下のメソッドを追加する必要があるかもしれない。

wantsSteps
    ^ true

デスクトップ全体を表すモーフであるWorldMorphの描画サイクルの一部として、stepメッセージが送られてくるため、モーフ側ではstepを実装する以外に設定する必要がない。
デフォルトでは1000ミリ秒間隔でstepメッセージが送られてくるが、その間隔はstepTimeメソッドにミリ秒単位で設定できる。

stepTime
    ^ 500

上のメソッドをMyMorphに登録すると、stepメッセージが500ミリ秒ごとに送られるようになる。
それでは、steppingを使ってモーフを動かしてみよう。
第3回で説明したモーフの位置設定の方法を利用して、先ほどのstepの定義を以下のように変更してみる。

step
    self color: Color random.
    self topLeft: (self topLeft + (2@0))

すると、Acceptした瞬間からゆっくりとMyMorphが右に移動していくのがわかる。MyMorphは500ミリ秒ごとに色を変えながら、右に2ピクセル移動している。
Playgroundから適当な間隔を置いて以下の式をDo itすると、Command-D(Alt-D)を押すと複数のMyMorphが色を変えながら移動していく。

MyMorph new openInWorld.

モーフは画面外に出てしまっても動き続けるので、MyMorphの全てを一度に削除する方法を教えよう。

MyMorph allInstances do: [ :each | each delete ].

モーフに対してdeleteメッセージを送れば、画面から消すことができる。

YouTube動画はこちら
(第7回おわり)