ページトップへ

子どものScratchで追いかける敵を作るには?向きを更新しながら近づく仕組み

コラム

「敵をプレイヤーのほうへ動かしたのに、途中で逃げる向きを変えると追ってこない」。子どものScratch作品でそんな場面があったら、相手のほうを向く処理と、前に進む処理の両方を繰り返すと、追いかける動きが作れます。

ここでは、マウスで動かすプレイヤーを敵が追いかける小さな作品を作ります。まず追跡だけを確かめ、その後で「近づいたら止まる」条件を足しましょう。得点や体力、ゲームオーバーの処理は入れません。

追跡の基本は「相手のほうを向く→少し進む」

Scratchの「〜へ向ける」は、自分の向きを、選んだスプライトやマウスポインターのほうへ変えるブロックです。相手の場所へ移動させるブロックではありません。動きの役割は、Scratch公式ヘルプの「point towards」で確認できます。

一方、「〜歩動かす」は、スプライトが現在向いている方向へ進ませます。つまり、敵に「プレイヤーへ向ける」「2歩動かす」を順につなぐと、その時点のプレイヤーに近づく動きになります。公式ヘルプの「move steps」でも、現在の向きへ進むことが説明されています。

相手が動いた後も追跡するには、この組み合わせを繰り返します。一度決めた向きのまま走らせるのではなく、その都度、行き先を見直す設計です。

まずはプレイヤーと敵だけの作品を作る

新しいプロジェクトに、逃げる役と追う役のスプライトを用意します。名前はそれぞれ「プレイヤー」「敵」にしてください。最初は丸い図形など、向きが分かりにくくても困らない絵で十分です。

以下の数値は、動作を試すための設定例です。推奨値や学年ごとの基準ではありません。まず同じ設定で組み、その後に変えて比べます。

プレイヤーをマウスポインターで動かす

「プレイヤー」を選び、次の順にブロックを置きます。下の枠は、Scratch上で組む順番を文字にしたものです。

緑の旗が押されたとき
ずっと
  [マウスのポインター]へ行く

これは追跡を試すための操作です。矢印キーで動かす作品をすでに作っている場合は、そのプレイヤーを使っても構いません。移動ブロックの種類は、Scratch公式のブロック一覧でも確認できます。

敵には二つの動きを繰り返させる

今度は「敵」を選びます。プレイヤー側ではなく、敵側に次の処理を作ってください。

緑の旗が押されたとき
x座標を -150、y座標を 0 にする
ずっと
  [プレイヤー]へ向ける
  2歩動かす

「プレイヤーへ向ける」と「2歩動かす」は、どちらも「ずっと」の内側に入れます。「ずっと」は内側の処理を繰り返すブロックです。公式ヘルプの「forever」にも、その役割が示されています。

緑の旗を押し、ステージ内でマウスをゆっくり動かしてみましょう。敵が近づいてきたら、プレイヤーを横へ逃がし、次に上へ動かします。敵の進む向きも変われば、基本の追跡ができています。

「最初に向くだけ」と「毎回向き直す」を比べる

なぜ向き直しが必要なのかは、ブロックの位置を一つ変えると確かめられます。敵の「プレイヤーへ向ける」を、「ずっと」の直前へ移してみてください。

向きを変える位置 この例での動き
「ずっと」の前 開始時に一度だけ相手を向き、その方向へ進み続ける
「ずっと」の中 動く相手の位置に合わせて、進む方向を更新する

これは、上で説明した各ブロックの役割から組み立てた比較です。試すときは、最初にプレイヤーを敵の右側へ置き、敵が動き始めてから上側へ逃がすと、違いを観察しやすくなります。

開始直後だけでは、どちらも同じように近づいて見えることがあります。追跡できるかの確認には、途中で逃げる方向を変える操作が必要です。

比較が終わったら、「プレイヤーへ向ける」を「ずっと」の内側へ戻します。以降は、毎回向き直す構成で進めましょう。

近づいたら止まる敵にする

追いかけるだけでなく、プレイヤーの手前で待たせたい場合は、動く条件を加えます。「プレイヤーまでの距離」が決めた値より大きい間だけ、向き直して進ませる形です。

Scratchの「〜までの距離」は、選択したスプライトやマウスポインターまでの距離を調べるブロックです。公式ヘルプの「distance to」を参照できます。

緑の旗が押されたとき
x座標を -150、y座標を 0 にする
ずっと
  もし [プレイヤーまでの距離 > 30]なら
    [プレイヤー]へ向ける
    2歩動かす

「もし」の条件には、演算の「>」を入れ、その左側へ「プレイヤーまでの距離」、右側へ「30」を入れます。条件が成り立つときだけ内側の処理を行う仕組みは、公式ヘルプの「if」で確認できます。

記事の途中で1分・5問

お子さまに合う学び方診断

正解・不正解を決める診断ではありません。今の様子から、取り組みやすい学び方の入口をご案内します。

この例では、距離が30より大きい間だけ近づき、30以下になると移動しません。プレイヤーがまた離れれば、追跡を再開する構成です。

ただし、「30なら必ず絵が重ならない」という意味ではありません。使う絵の大きさや形が違えば、見た目に必要な間隔も変わります。大きなキャラクターなら停止条件の数値を大きくするなど、実際の画面を見ながら調整してください。ここでは接触やダメージの判定とは分けて、止まる間隔だけを決めます。

変えるのは「歩数」か「止まる距離」のどちらか一方

追いかけ方を比べるなら、「歩数を2から1へ変える」「止まる距離を30から50へ変える」のように、一度に一つだけ変更します。

  • 追いつくまでの動きを変えたい:一回に進む歩数を変える。
  • 近づきすぎないようにしたい:止まる距離を変える。

これは本記事の試作用の比較方法です。両方を同時に変えると、追いかけ方が変わった理由を切り分けにくいため、片方を固定して見比べましょう。

この追跡でできること・できないこと

今回組んだ敵は、プレイヤーの現在いる方向へ向き直します。逃げた道順を記録して、同じ道を後からたどる処理ではありません。

また、ここで示したコードには壁を調べる条件がありません。迷路に置いても、通路を選んで回り込む仕組みにはならない点に注意してください。まず障害物のない背景で完成させると、追跡そのものを確かめられます。

子どもが「敵ではなく、ついてくるペットにしたい」と考えたら、絵と止まる距離を変える案があります。追いかける対象を更新する仕組みはそのままに、相手との間隔を変える試作です。

一方、「壁を避けてほしい」「通った足跡を追わせたい」は、別の条件や記録が必要になる制作テーマです。基本の追跡ができたところで、次に足したい動きを一つ選ぶと、作品の変更箇所が明確になります。

よくある質問(FAQ)

「プレイヤーへ向ける」を置いたのに動きません

そのブロックは向きを変える役割です。今回の構成では、その下へ「2歩動かす」をつなぎます。最初に示した公式ヘルプのとおり、方向の変更と移動は別々の処理です。

最初は近づくのに、途中から追いかけなくなるのはなぜですか?

今回の例なら、「プレイヤーへ向ける」が「ずっと」の外へ出ていないかを確認します。開始時だけ向きを変える構成では、プレイヤーが逃げる方向を変えても進行方向が更新されません。

選択欄に「プレイヤー」がありません

公式ヘルプでは、「〜へ向ける」の選択欄にプロジェクト内のほかのスプライトが表示されると説明されています。プレイヤー用のスプライトを作成したか、別の名前のままになっていないかを確かめてください。

敵が速すぎるときは、どこを変えますか?

まず、この例の「2歩動かす」を「1歩動かす」にして比べてみましょう。動く距離の設定を変える試し方です。停止距離はそのままにして、追いつくまでの違いを見ます。

プレイヤーに触れたらゲームオーバーにもできますか?

今回のコードにはゲームオーバー処理は含めていません。まず「相手を追う」「決めた距離で止まる」を完成させ、接触時に何を起こすかは別の処理として設計してください。

「どんな追いかけ方にしたいか」を体験で相談する

南青山のCotoMiraiでは、年齢・興味・理解度に合わせた個別指導で、プログラミングやロボット、デジタルものづくりに取り組みます。相談するときは、「追跡する敵を作りたい」「少し離れてついてくるペットにしたい」のように、実現したい動きを具体的に伝える方法があります。

公式の入会案内では、年中以上のお子さまは無料体験からの流れが案内されています。今回の作品を使った体験や相談が可能か、希望する教材とあわせて申し込み時に確認してください。

CotoMiraiの無料体験・入会方法を見る

参考にした情報

関連する記事

読後に1分・5問

お子さまに合う学び方診断

正解・不正解を決める診断ではありません。今の様子から、取り組みやすい学び方の入口をご案内します。

お知らせ一覧へ

アクセス

A C C E S S