今回は、前回作成した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回おわり)