「敵に一度ぶつかっただけなのに、体力が一気になくなってしまう」。子どものScratchゲームでこんな動きが出たら、体力を減らした後に『敵から離れるまで待つ』処理を入れると、接触1回につきダメージを1回だけにできます。
この記事では、主人公と敵がそれぞれ1体いるゲームを例に、触れ続けている間の追加ダメージを止める方法を紹介します。減らす体力の量や敵の速さではなく、「次の接触をいつ数えるか」を整えるための手順です。
「触れている」と「ぶつかった瞬間」は違う
まず、主人公に置いたブロックを見てみましょう。次のような組み合わせになっていないでしょうか。
ずっと
もし「敵に触れた」なら
体力を減らす
Scratchの「触れた」ブロックは、指定した相手に接触しているかを調べます。「接触が始まった瞬間だけ」を知らせるブロックではありません。対象として選べるものは、Scratch公式の接触判定の説明で確認できます。
また、「ずっと」は中の処理を繰り返し、「もし」は条件が成り立つと中の処理を実行します。主人公と敵が重なったままだと、繰り返しのたびに同じ条件が成立し、体力を減らす処理に再び進む構成です。各ブロックの動作は、公式の「ずっと」の説明と「もし」の説明に示されています。
この構成だけが原因かどうかは、実際の作品を見ないと分かりません。ただ、該当する場合は体力の初期値を増やすより先に、接触を数える区切りを作ると、狙った動きに近づけられます。
次のダメージを許す条件を決める
同じ「連続して減らさない」でも、次に体力を減らしてよい条件は一つではありません。作りたい遊び方に合わせて選びます。
| 次に減らしてよい条件 | 触れ続けたときの扱い | 選ぶ場面の例 |
|---|---|---|
| いったん敵から離れ、再び触れる | 離れるまでは追加で減らさない | ぶつかった回数を数えたい |
| 決めた待ち時間が終わる | 待ち時間の後も触れていれば、また減らす | 危険な場所に居続けると繰り返しダメージを受ける |
ここで作るのは、上の「離れてから、もう一度触れたら減らす」方式です。ずっと重なっていても、最初の接触分しか減りません。
単に「○秒待つ」を足す方法とは区別してください。秒数で待つだけでは、待ち終わったときにまだ接触している場合、次の繰り返しで再び体力を減らす構成になります。時間がたったかではなく、離れたかどうかを次の条件にします。
主人公側に「離れるまで待つ」を組み立てる
準備するものと、この例の範囲
この説明では、操作するスプライトの名前を「主人公」、接触相手の名前を「敵」とします。作品で別の名前を使っている場合は、その名前を選んでください。
変数「体力」を用意し、接触を調べる処理は主人公側に置きます。敵やクローンが複数いる場合は対象の管理が変わるため、まずは敵1体で仕組みを確かめましょう。
以下の体力の初期値「5」と減らす量「1」は、動きを確かめるための例であり、推奨値ではありません。また、この例にはゲームオーバーの処理を含めていません。体力がなくなったら終了する仕組みは、作品側で別に用意する必要があります。
減らした直後に、接触が終わるのを待つ
主人公に、次の順序でブロックを組みます。下の表示は、Scratchのブロックの入れ子を文章で示した構成例です。貼り付けて実行するコードではありません。
緑の旗が押されたとき
体力を 5 にする
ずっと
もし「敵に触れた」なら
体力を -1 ずつ変える
「『敵に触れた』ではない」まで待つ
最後の条件は、「調べる」の「敵に触れた」を、「演算」の「ではない」に入れて作ります。「ではない」は条件の真偽を反転させるブロックです。公式の「ではない」の説明も参照できます。
「まで待つ」は、条件が成り立つまで、その下の処理へ進むのを待ちます。この例では敵に触れている間は待ち、離れたら先へ進む、という使い方です。動作の根拠はScratch公式の「まで待つ」の説明で確認できます。
順番が大切です。先に体力を減らし、その後で離れるのを待つので、最初に触れた時点でダメージが入ります。待つ処理を減算より前に置くと、「離れた後に減る」という別の動きになってしまいます。
移動の処理とは別のまとまりにする
主人公のキー操作まで、接触判定と同じ「ずっと」に入れていないか確認してください。そのまとまりが「離れるまで待つ」で止まると、後に続く移動処理へ進めず、自分で敵から離れられない構成になることがあります。
お子さまに合う学び方診断
正解・不正解を決める診断ではありません。今の様子から、取り組みやすい学び方の入口をご案内します。
この例では、主人公を動かす処理と、体力を減らす処理を、別々の「緑の旗が押されたとき」から始める構成にします。別の処理が動いていても、接触判定側は離れるまで待つ、という役割分担です。
また、もともと敵側にも「主人公に触れたら体力を減らす」処理がある場合は、そのまま重ねないようにします。今回の例では、体力を減らす担当を主人公側の処理にまとめてください。
接触テスト表で「1回」の区切りを確かめる
完成したら、敵を避けながら普通に遊ぶだけでなく、あえて触れ続けるテストをします。以下は、この構成例が目指す動きを整理した確認表です。実際の作品の検証結果を示すものではありません。
| 試す操作 | この方式で期待する動き | 作品の結果 |
|---|---|---|
| 敵に近づくが、触れない | 体力は変わらない | 記入: |
| 敵に触れ、そのまま重なる | 最初に1だけ減り、その後は減らない | 記入: |
| 重なった状態から敵を離れる | 離れる動作だけでは減らない | 記入: |
| 離れてから、もう一度触れる | 再び1だけ減る | 記入: |
見た目が離れたように感じても、判定上まだ触れている場合を区別するため、再接触のテストでは十分に距離を取ってください。
うまくいった目安は、単に「減り方が遅くなった」ではありません。触れ続ける間は止まり、離れて触れ直すと再び減ることです。ここが確認できれば、今回決めた「接触1回」の区切りと処理が一致しています。
減らす量そのものを見直したい場合は、別記事の加点・減点を整理するルール表を参照してください。このページでは、その量を何度適用するかに絞って確かめます。
よくある質問(FAQ)
「1秒待つ」を入れれば同じですか?
同じではありません。秒数で待つ方法は、時間が終われば次へ進みます。今回の方法は、時間がどれだけたっても、敵に触れたままなら待ち続けます。「離れてからの再接触」を数えたい場合は、離れる条件を使います。
この方法は、いわゆる無敵時間ですか?
一定時間だけダメージを受けなくする仕組みとは異なります。この例では、接触が続いている間の追加ダメージを止めています。離れた直後に触れ直せば、短い間隔でも再び体力が減る設計です。
待つ処理を入れると主人公が動かなくなります
移動と接触判定が同じ処理のまとまりに入っていないかを見てください。この記事の構成例は、移動を別のまとまりで実行することを前提にしています。ただし、作品を見ないまま原因を断定することはできません。
敵が複数いても、そのまま使えますか?
この記事の例は敵1体が対象です。敵Aに触れて待っている間に、敵Bへの接触も数えたいなら、その扱いを別に決める必要があります。複数の敵やクローンに、そのまま対応する手順ではありません。
体力がゼロになっても減り続ける場合は?
接触回数の区切りとは別に、体力がなくなった後の処理が必要です。この例は接触判定だけを確かめるためのものなので、完成版ではゲーム終了後にダメージ処理を続けない構成も用意してください。
作品の「こう数えたい」を教室で形にする
今回の仕組みを相談するときは、「触れている間ずっと減らしたいのではなく、離れてもう一度触れたら減らしたい」と伝えると、作りたいルールが具体的になります。作品を持ち込めるかどうかは、申し込み時にご確認ください。
CotoMiraiでは、年齢・興味・理解度に合わせた個別指導で、プログラミングやロボット、デジタルものづくりに取り組めます。南青山で、青山一丁目・乃木坂から通う教室を探している方は、入会方法・体験申し込みの案内をご確認ください。
体験で今回の作品やテーマを扱えるかは、事前確認が必要です。希望する内容を添えてお問い合わせください。
参考にした情報
関連する記事
お子さまに合う学び方診断
正解・不正解を決める診断ではありません。今の様子から、取り組みやすい学び方の入口をご案内します。