ページトップへ

子どものScratchで空中ジャンプを防ぐには?着地とキーの押し直しを分ける作り方

コラム

子どもがScratchでジャンプを作ったものの、スペースキーを押すたびに空中でも跳べてしまう。地面にいるときだけに直したら、今度は押しっぱなしで着地後も跳ね続けることがあります。

「地面にいる」と「キーを押し直した」の両方がそろったときだけ、ジャンプを始める作りにしましょう。この記事では、高さが変わらない平らな地面に絞り、組み立て例と動作を確かめる表を紹介します。

空中ジャンプと、着地後の自動ジャンプは別の条件で防ぐ

まず、目指す動きを決めます。今回は「空中で押しても跳ばない」「押しっぱなしでは着地後に跳ばない」「着地後に離して押し直せば跳ぶ」というルールです。

Scratchの「スペースキーが押された」は、その瞬間にキーが押されているかを調べるブロックです。押し始めだけを記録するものではありません。基本動作はScratch公式のキー入力の説明で確認できます。

ジャンプ開始の条件 防げること 残る問題
キーが押されている 条件を満たせばジャンプできる 空中でもジャンプを開始してしまう
キーが押されていて、地面にいる 空中での再ジャンプ 長押ししたまま着地すると再び跳ぶ
地面にいて、キーが離れた状態から押された 空中ジャンプと、長押しによる着地後の再ジャンプ 今回採用する条件

空中で押した操作を着地まで予約する機能は、今回は入れません。着地より前からキーを押していた場合は、地面に戻ってからいったん離し、押し直すルールにします。

準備するのは、平らな地面と三つの変数

作業前に作品を複製し、試すための版を用意してください。操作するキャラクターを選び、ジャンプや落下のためにy座標を変えている古い処理は、いったん外しておきます。以下の例では、上下の移動を一つの処理にまとめます。

地面は、画面の左右に続く平らなものとして考えます。穴、坂道、高さの違う足場、動く床は対象外です。背景の地面に触れた色を調べるのではなく、キャラクターが立つ高さを数値で決めます。

「着地高さ」は地面の線そのものではない

キャラクターを、足が地面に合って見える位置へ手で置きます。そのときのキャラクターのy座標を「着地高さ」にします。地面の線の位置と、キャラクターのy座標を同じにする必要はありません。

現在の値は「y座標」の表示で確かめられます。表示方法はScratch公式のy座標の説明を参照してください。最初はコスチュームと大きさを固定して試しましょう。

変数名 入れる内容
着地高さ 地面に立った状態のキャラクターのy座標
縦の速さ 繰り返しのたびに上下へ動かす量
前のキー状態 前回の確認時に、キーが離れていれば0、押されていれば1

この例では三つとも「このスプライトのみ」で作ります。変数には、全スプライトで使うものと、選んだスプライトだけで使うものがあります。作成時の選択肢はScratch公式の変数の説明で確認できます。

ブロックは「入力を確認→上下移動→着地」の順にする

以下は、この記事用に組み立てた処理例です。ブロック画像ではなく、入れ子と実行順を示しています。「もし」の内側に入る範囲を、字下げに合わせて組み立ててください。

着地高さの−100、跳ぶときの12、落下のための−1、待ち時間の0.03秒は、すべて試作用の設定例です。推奨値や効果を保証する数値ではありません。着地高さは自分の作品で確認した値に置き換えます。

緑の旗が押されたとき
着地高さを -100 にする
縦の速さを 0 にする
前のキー状態を 1 にする
y座標を 着地高さ にする

ずっと
  もし「スペースキーが押された」なら
    もし「前のキー状態 = 0」かつ「y座標 = 着地高さ」なら
      縦の速さを 12 にする
    [内側の「もし」はここまで]
    前のキー状態を 1 にする
  でなければ
    前のキー状態を 0 にする
  [キー入力の「もし」はここまで]

  縦の速さを -1 ずつ変える
  y座標を 縦の速さ ずつ変える

  もし「y座標 < 着地高さ」なら
    y座標を 着地高さ にする
    縦の速さを 0 にする
  [着地の「もし」はここまで]

  0.03 秒待つ
[「ずっと」はここまで]

押した記録は、空中でも更新する

この例で重要なのは、「前のキー状態を1にする」を、ジャンプ開始の条件の外側に置くことです。空中で押して跳べなかった場合も、「キーは押されていた」と記録します。

たとえば空中でスペースキーを押し、そのまま着地したとします。着地した時点では「前のキー状態」が1なので、ジャンプは始まりません。キーを離すと0になり、次に押したときに初めて開始条件がそろいます。

開始時の値も1にしています。緑の旗を押す前からスペースキーを押していた場合に、いきなり跳ばないための設定です。一度離すと操作できるようになります。

落下と着地は、キーを離しても続ける

「縦の速さを変える」「y座標を変える」「着地を調べる」は、キー入力の条件の外側に置きます。キーを離した後も、この部分は繰り返される構造です。

記事の途中で1分・5問

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

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

Scratchでは、y座標を正の数だけ変えると上へ、負の数だけ変えると下へ動きます。これはScratch公式の「y座標を変える」の説明にある基本動作です。この例では速さを少しずつ減らし、上昇から落下へ切り替えています。

地面より下へ進んだら、着地高さへ戻して速さを0にします。「y座標を○にする」は指定した高さへ置くブロックです。こちらはScratch公式の位置指定の説明で確認できます。

完成の確認は、押す場所と離すタイミングを変える

一度跳べただけでは、空中ジャンプを防げたかは分かりません。次の操作を分けて試しましょう。確認中は「前のキー状態」と「縦の速さ」を画面に表示すると、動きと数値を照らし合わせられます。

試す操作 今回のルールで期待する動き
地面で押し、すぐ離す 跳んでから地面へ戻る
跳んだ後、空中で離して押し直す 空中では再ジャンプしない
地面で押し、着地するまで押し続ける 着地後はその場にとどまる
空中で押し直し、そのまま着地する 着地しただけでは跳ばない
着地後に離し、改めて押す 次のジャンプを始める

空中で再ジャンプするなら、ジャンプ開始の内側に「y座標=着地高さ」が入っているかを見ます。長押しで跳ね続けるなら、押している間も「前のキー状態」が1になっているかを確認します。

キーを離した瞬間に空中で止まる場合は、落下の処理までキー入力の「もし」の中へ入れていないか、字下げの範囲と照らし合わせてください。

この方法を使い続けられる地面、作り替えが必要な地面

今回の仕組みは、画面のどこでも同じ高さに着地する作品向けです。地面の絵を描いただけで、その形を自動的に読み取る仕組みではありません。

たとえば、左右へ走って障害物を跳び越えるゲームでも、床の高さが一定なら同じ考え方を使えます。一方、床に穴を描いても、この処理では穴の上に立ててしまいます。横位置にかかわらず着地高さへ戻すためです。

高い足場や坂道を加えたい場合は、「今いる場所に床があるか」「落下中に足場の上面を通過したか」など、別の着地判定が必要になります。まず平らな床で入力ルールを確かめ、その後に足場の仕組みを分けて追加するのが、この記事の範囲を生かす進め方です。

よくある質問(FAQ)

地面にいる条件だけでは足りませんか?

長押ししたまま着地したとき、すぐ次のジャンプを始めるルールなら、それでも構いません。今回は「一度離して押し直す」操作にしたいので、前のキー状態も記録します。どちらにするかは、作りたいゲームの操作感で決められます。

なぜ「スペースキーが押されたとき」だけで作らないのですか?

この例では、キーの状態と着地の条件を同じ繰り返しの中で確認したいからです。別のイベントから縦の速さを変える処理が残っていると、ここで決めた開始条件を通らずに跳ぶ可能性があります。ジャンプ開始は一か所にまとめてください。

地面に立っているのに、見た目が浮いています

足が地面に合うように置き直し、そのときのy座標を着地高さへ入れます。コスチュームや大きさを変更した後も、同じ値で足元が合うか確認してください。今回の例は絵の接触ではなく、決めた高さで止めています。

空中で押した操作を、着地直後のジャンプに使えますか?

今回の例では使いません。空中での入力を一定の範囲で記憶する仕組みは別に必要です。まず「着地後に押し直す」版を完成させ、予約入力を入れたいかを実際に遊んで決めましょう。

体験では「どんな操作にしたいか」を伝える

教室で相談するときは、「空中ジャンプをなくしたい」に加え、「押しっぱなしなら着地後も跳んでよいのか」を伝えると、目指す動きが明確になります。上のテスト表を使い、今の動きと希望する動きに印を付けておく方法もあります。

CotoMiraiは、年齢・興味・理解度に合わせた個別指導で、プログラミングやロボット、デジタルものづくりを扱っています。青山一丁目・乃木坂から通える南青山の教室で無料体験を受け付けています。体験時に使う教材や、制作中のScratch作品を扱えるかは、申し込み時に確認してください。

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

参考にした情報

関連する記事

読後に1分・5問

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

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

お知らせ一覧へ

アクセス

A C C E S S