Scratchでジャンプを追加しよう!床の当たり判定なしでもOK(ベル集めゲームの続き)

Scratchでジャンプを追加しよう!床の当たり判定なしでもOK(ベル集めゲームの続き)
この記事はだいたい 7 分前後で読めます。

前回は、ネコがベル(コイン)を取るとスコアが増えて、目標数で「クリア!」まで作りました。
あれだけでも十分ゲームなんですが、やっぱり入れたくなるのが ジャンプ ですよね。

今回は、そのジャンプを追加します。

「床の当たり判定(床に触れたら止まる)って、作らないとダメ?」
…って思うんですが、今回は作らなくて大丈夫です。

床の当たり判定の代わりに、
y=-110 を地面のライン(見えない床)として扱えば、ジャンプは普通に作れます。

まずはジャンプだけ追加して「ちゃんと飛べた!」までをゴールにして、
床判定(段差・足場)やゲームオーバーは次回に回す方が、つまずきが少なくて気持ちよく進められました。


今回できるようになること

ネコがスペースキーでジャンプできる
上がったあと自然に落ちる(重力)
地面(y=-110)に着地して止まる
スペースを押しっぱなしでも連続ジャンプしない(ここ大事)


まず準備:変数を1つだけ作ります

ジャンプに必要なのは、ネコ専用の変数1つです。

  • y速度(このスプライトのみ)

「上に飛ぶ勢い」と「落ちる勢い」を、ここに入れて動かします。
最初は難しそうに見えますが、慣れるとこれが一番ラクです。


ジャンプの考え方(ざっくり)

ジャンプは、ざっくり言うとこういう流れです。

スペースを押したら 上向きの勢い(y速度)を入れる
毎フレーム 重力でy速度を減らす
y速度ぶんだけ y座標を動かす
地面より下に行ったら 地面に戻して止める

これだけです。順番に見ていきます。


ネコ側のコード(ジャンプ本体)

ここからは、ブロックを見ながらの方が早いので、まず全体を貼っておきます。

  • キャプション:ネコ:ジャンプ(y速度)+重力+着地(y=-110)。押しっぱなし対策も入れました。

1) 旗が押されたとき:初期化

スタートの準備はシンプルです。

  • y速度を 0 にする
  • y座標を -110 にする
  • 回転方法を「左右のみ」にする

今回は 床の当たり判定を作らず
y=-110 を「地面の高さ(見えない床)」として扱います。
なので最初にネコを -110 に置いておくと安心です


2) ずっと:ジャンプ入力 → 押しっぱなし対策 → 重力 → 着地

ここからが本番です。やってることは4つだけです。

2-1) ジャンプ入力(スペース)

画像の上の方にあるこの部分です。

  • もし「スペースキーが押された」かつ「y座標 = -110(地面)」なら
    → y速度を 12 にする

ポイントは 地面にいる時だけジャンプOK にすることです。
これがないと空中で連打できてしまって、ちょっと別ゲームになります(笑)


2-2) 押しっぱなし対策(ここが今回のキモ)

ジャンプを入れると、かなりの確率で次の現象が起きます。

「スペースを押しっぱなしにすると、着地した瞬間にまたジャンプする」

Scratchの「キーが押された」は、“押した瞬間”ではなく“押している間ずっと”反応するので、起きやすいんですよね。

なので、ジャンプした直後にこれを入れます。

  • (スペースキーが押された)ではない まで待つ
    =スペースを離すまで待つ

これを入れるだけで、押しっぱなし連続ジャンプが止まります。
(地味なんですが、ゲームとしての操作感が一気に良くなります)


2-3) 重力(だんだん落ちる)

次は重力です。

  • y速度を -1 ずつ変える

毎フレーム少しずつ勢いが減るので、
自然に「上がる→止まる→落ちる」になります。


2-4) y座標を動かす(勢い分だけ移動)

  • y座標を y速度 ずつ変える

y速度がプラスなら上へ、マイナスなら下へ動きます。


2-5) 着地(床判定の代わり)

床に触れた判定は作っていないので、今回はここで着地させます。

  • もし y座標 < -110 なら
    • y座標を -110 にする
    • y速度を 0 にする

これがあると、地面をすり抜けません。
「見えない床に当たって止まる」感じになります。


ジャンプの調整(迷ったらここだけ)

数値はだいたいこのあたりが気持ちよく動きます。

  • ジャンプ力(y速度=12)
    低いなら 13〜14、高いなら 10〜11
  • 重力(-1ずつ変える)
    落ちるのを速くしたいなら -2(ちょっと難しくなります)

最初は 12 と -1 のままがおすすめです。


今回はゲームオーバーを入れません(次回に回す理由)

今回のテーマは「ジャンプを安定させる」です。

床の当たり判定を作らず y=-110 で着地させている間は、
基本的にネコは地面で止まるので「落下でゲームオーバー」が作りにくいです。

なので今回は、

  • ジャンプができる
  • 押しっぱなしでも暴走しない
  • 地面にきれいに着地する

ここまでをきっちり固めて、次回

  • 床の当たり判定(足場・段差)
  • 落ちたらゲームオーバー

にしたいと思います。

まとめ

今回は、ベル集めゲームに ジャンプ(重力) を追加しました。

床の当たり判定はまだ作っていませんが、
y=-110 を地面として固定すれば、ジャンプは十分ゲームっぽくなります。

そして「押しっぱなしで連続ジャンプ」を防ぐために、
スペースキーが離されるまで待つ(〜ではないまで待つ)を入れたのが今回のポイントでした。


次回は、いよいよ 床の当たり判定です。

  • 段差(足場)を作る
  • 足場に着地する
  • 落ちたらゲームオーバー

ジャンプができた今なら、段差を1個置くだけで一気にゲームになります。

Wrote this article この記事を書いた人

TOPへ