前へ - 次へ - 目次

キャラクタの衝突判定をしましょう

次に,猫(Cat)がリンゴ(Apple)にぶつかると,リンゴを取る(リンゴが消える)ようにしてみましょう.

watchHit という命令を使うと,2つのキャラクタがぶつかったときに, 特定の命令を実行することができます.

リスト1で示した部分を追加してみましょう. (まだプログラムは実行しないでください)

リスト1 Game
siro=new Cat;
siro.say("いただきまーす");
apple1=new Apple;
apple1.x=200;
apple1.y=150;
apple2=new Apple;
apple2.x=300;
apple2.y=100;
watchHit(Cat, Apple, hitCatApple);

watchHit(Cat, Apple, hitCatApple)と書くと, 猫(Cat)とリンゴ(Apple)がぶつかったときに, hitCatApple という命令が実行されるようになります.

ところで,hitCatApple ってどんな命令でしょうか? 実はこの時点ではそんな命令はありません.この命令は自分で作ってあげる必要があります. さらにリスト2のように追加してみましょう.

リスト2 Game
siro=new Cat;
siro.say("いただきまーす");
apple1=new Apple;
apple1.x=200;
apple1.y=150;
apple2=new Apple;
apple2.x=300;
apple2.y=100;
watchHit(Cat, Apple, hitCatApple);
function hitCatApple(cat,apple) {
    apple.hide();
}

実行すると,猫とリンゴが触れたときにリンゴが消えるようになります.

最後に書いたfunction で始まる部分は, 自分で新しい命令を作るための書き方です. ここでは,hitCatAppleという名前の命令を作っています. その後ろにある(cat, apple) という部分は,この命令を実行するに あたって,必要な情報を受け取るためのものです. ここでは,「どのキャラクタと,どのキャラクタがぶつかったか」という情報を受け取り, それぞれに,catapple という名前をつけています.

cat は,もちろん最初に作った猫ですが, もうひとつのapple は,そのとき猫に触れていたリンゴです. それはapple1 かもしれないし, apple2 かもしれませんが,とにかく猫が触れていたほうのリンゴに,appleという名前がつけられます.

そして,そのapple に, apple.hide() という命令を行っています.これは,そのキャラクタ(ここではapple)を隠す(画面から見えなくする)命令です.

前へ - 次へ - 目次