はぐくもう「つなげるちから

さのプログラミング教室

鎮守の森教室

無料体験会実施中!

重力ジャンプ【Scratch】

ブログ

アクションゲームを作るときに、上下左右に動かすに加えて、「ジャンプ」という動きを入れる時があります。

ジャンプボタンを押した時、上に移動し、地面に触れるまで下に移動し続けるというプログラムでも、ジャンプは表現できます。ただしこの動きは、同じ速さで上下に移動しているように見えるので、少し不自然に感じます。

このプログラムで青箱をジャンプさせると、↓
一定の速さで上下に動いている。ジャンプとしては不自然。

重力がかかっているかのようなジャンプにしたい時には、「変数」を使って移動量をコントロールし、その移動量に応じた分だけ移動させれば良いのです。

準備:地面を作る。

地面に触れている間は落下しないようにする。逆に言えば、空中にいるときは重力がかかるようにしておく。そのために、あらかじめ地面を作っておきます。

「背景」の下部分に、黒い長方形を置いただけの簡単な地面です。

後で「黒色に触れたとき」という条件を使うので、地面の色は黒一色にしました。

黒色の地面。

作り方1:変数を作る。

今回はジャンプを表現するので、変数名を「ジャンプ」としました。

変数「ジャンプ」を作る

作り方2:変数「ジャンプ」の初期値を0にしておく。

はじめはジャンプしていないので、「ジャンプ」の値は0です。

そして、ジャンプした時に変数「ジャンプ」の量だけ上に移動します。

こうすることで、変数「ジャンプ」が変化するたびにy座標が変化し、上下に動く、という仕組みです。

ジャンプの仕組み。「ジャンプ」の初期値は0なので、このままだと何も起きない。

作り方3:スペースキーでジャンプする

スペースキーを押したら、ジャンプするようにします。実際には、スペースキーを押したら、変数「ジャンプ」の値を大きくします。

重力加速度っぽく、値を9.9にしました。

これだけだと、上への移動量が9.9のまま変わりませんから、遥か上空へ飛んでいってしまいます。

さらば、地球よ。

作り方4:地面に触れたときと、空中にいるときのコントロール

ここで、ジャンプの時のスピードについて考えてみましょう。

上へ移動するスピードは、ジャンプした瞬間が一番早く、その直後から重力によってスピードがどんどん落ちてきます。

ある程度の高さまで来た時に上へのスピードは0になり、今度は下に向かって加速していきます。

このことを表現するためには、以下のようにします。

  1. スペースキーを押した瞬間に変数「ジャンプ」の値を9.9にする
  2. スプライトを9.9上へ移動
  3. 変数「ジャンプ」の値を0.5減らす。「ジャンプ」は9.4になる。
  4. スプライトを9.4上へ移動

繰り返すと、上への移動量は下表のようになります。

繰り返し(回)1234567891011121314151617181920212223242526272829
上への移動量9.99.48.98.47.97.56.96.45.95.44.94.43.93.42.92.41.91.40.90.4-0.1-0.6-1.1-1.6-2.1-2.6-3.1-3.6-4.1
上への移動量。マイナス(赤文字)は下への移動量となる。

これで、「ジャンプした瞬間、上へのスピードが一番早く、そのスピードはだんだん遅くなり、ある程度の高さでスピードは0になり、その後は下へのスピードが増していく」という値の変化を表現できました。この値を上下の位置を表す「y座標」へ加算していきます。

そして、地面に触れたらそれ以上落ちないように、地面(黒色)に触れたら変数「ジャンプ」の値を0にします。これで、上下の移動がなくなります。

プログラムにすると、以下のようになります。

プログラムにすると、けっこうシンプル。

作り方5:スペースキーの仕組みとジャンプの仕組みを合体。

これで完成だと思っていた。

作り方6:問題発生!

作り方5までで完成だと思ったら、問題が発生。

このプログラムだと、空中でスペースキーを押した時、ジャンプができてしまう。

スマブラだったら、絶対負けないキャラが完成してしまう。

そこで、「スペースキーを押した時」という条件に『地面(黒色)にふれた時』という条件を付け加えた。

この条件で、カー○ーもピ○トも多段ジャンプができなくなる。

こうすれば、地面にふれた時以外でジャンプはできなくなる。

(しかしこの失敗で、「多段ジャンプ」のアイディアも思いついた。別の記事にしようと思います。)

作り方7:「重力ジャンプ」の完成

これを組み込めば、自然なジャンプが表現できる。

スペースキーを押した時のジャンプ量の値(9.9)と、ジャンプ減少量(-0.5)を変えると、「月面ジャンプ」「界王星ジャンプ」も表現できるはずです。色々試してみてください。

今後、スーパー◯リオのようなゲームも作りたいと思った時、この記事を思い出していただければお役に立てるかもしれません。


さのプログラミング教室は、「はぐくもう!つなげるちから」が合言葉の教室です。
同じ時間のクラスには、5人程度のお子さんが入室しますが、一人一人の興味・進度に合わせた課題を提供しますので、自分のペースで学ぶことができます。学習過程があり、同じスタート地点からスタートしますが、理解度やがんばりに応じて、どんどん次のステップへ進むことができます。


レッスンを無料で体験できます。
LINE公式に入り、「無料体験申込」を
タップしてお申し込みください。

画像に alt 属性が指定されていません。ファイル名: line_test_lesson-300x202.jpg
LINE公式よりお申し込みください
タイトルとURLをコピーしました