ドリトルの記事全体はカテゴリ「ドリトル」をご覧下さい。
うちの娘が画面を見ていて、「パパ。このかめさんたち、上に乗っかっちゃうんだね」と言いました。
そうです。作った「かめた」「かめこ」「かめお」達は相手がどういう状態か関係なしに勝手気ままに進むので、平気で乗っかっていきます。
オブジェクト同士がぶつかったかどうかで処理を変えるにはどうすればいいでしょうか。それは「衝突」という命令を使います。
タートルオブジェクトの命令の一つですが、「衝突」は少し変わっています。以前、プロパティの一つのように書いてしまいましたが、本当はメソッドです(おそらく「衝突する」という主体的に行う動作ではない(無理に表現するなら「衝突される」)ので、メソッドであっても「衝突」という表現になったのでしょう)。この動作は難しい言葉で「イベント」と呼ばれるものの一種です。event を英和辞書で引くと、「出来事」とあります。なんらかの出来事が発生することをイベントといいます。ボタンオブジェクトで「ボタンが押された」というのも一つのイベントです。
「衝突」は他のオブジェクトと重なったとき(オブジェクトの画像の一部分でも)に実行されます。しかし、最初は何を実行するのか定義されていません。したがって、たとえ衝突しても何も起こりません。新しい命令を定義する書式と同じやりかたで、
オブジェクト:衝突=「 」。
というようにどんな動作を実行するのか定義する必要があります。
ここではぶつかったら右に90度曲がるようにしてみましょう。かめたに「千鳥足」を定義した直後に、かめたの「衝突」を定義してあげれば、全員にコピーされますね。
かめた=タートル!作る。
かめた:千鳥足=「
自分!(乱数(360)) 左回り。
時計=タイマー!作る。
時計!「自分!(乱数(60)−30) 左回り 5 歩く」 実行。
」。
かめた:衝突=「自分!90 右回り」。
かめこ=かめた!作る。
かめこ!"ayumiRed.png" 変身する (赤) 線の色。
かめお=かめた!作る。
かめお!"ayumiYellow.png" 変身する (黄) 線の色。
かめた!千鳥足。
かめこ!千鳥足。
かめお!千鳥足。
さて実行してみましょう。

ん? みんな中央でじたばたしていますね。ちっとも進めないようです。
続きを読む