アクションゲームを作るときに、上下左右に動かすに加えて、「ジャンプ」という動きを入れる時があります。
ジャンプボタンを押した時、上に移動し、地面に触れるまで下に移動し続けるというプログラムでも、ジャンプは表現できます。ただしこの動きは、同じ速さで上下に移動しているように見えるので、少し不自然に感じます。

重力がかかっているかのようなジャンプにしたい時には、「変数」を使って移動量をコントロールし、その移動量に応じた分だけ移動させれば良いのです。
準備:地面を作る。
地面に触れている間は落下しないようにする。逆に言えば、空中にいるときは重力がかかるようにしておく。そのために、あらかじめ地面を作っておきます。
「背景」の下部分に、黒い長方形を置いただけの簡単な地面です。
後で「黒色に触れたとき」という条件を使うので、地面の色は黒一色にしました。

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

作り方2:変数「ジャンプ」の初期値を0にしておく。
はじめはジャンプしていないので、「ジャンプ」の値は0です。
そして、ジャンプした時に変数「ジャンプ」の量だけ上に移動します。
こうすることで、変数「ジャンプ」が変化するたびにy座標が変化し、上下に動く、という仕組みです。

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

これだけだと、上への移動量が9.9のまま変わりませんから、遥か上空へ飛んでいってしまいます。
作り方4:地面に触れたときと、空中にいるときのコントロール
ここで、ジャンプの時のスピードについて考えてみましょう。
上へ移動するスピードは、ジャンプした瞬間が一番早く、その直後から重力によってスピードがどんどん落ちてきます。
ある程度の高さまで来た時に上へのスピードは0になり、今度は下に向かって加速していきます。
このことを表現するためには、以下のようにします。
- スペースキーを押した瞬間に変数「ジャンプ」の値を9.9にする
- スプライトを9.9上へ移動
- 変数「ジャンプ」の値を0.5減らす。「ジャンプ」は9.4になる。
- スプライトを9.4上へ移動
繰り返すと、上への移動量は下表のようになります。
繰り返し(回) | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 |
上への移動量 | 9.9 | 9.4 | 8.9 | 8.4 | 7.9 | 7.5 | 6.9 | 6.4 | 5.9 | 5.4 | 4.9 | 4.4 | 3.9 | 3.4 | 2.9 | 2.4 | 1.9 | 1.4 | 0.9 | 0.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公式に入り、「無料体験申込」を
タップしてお申し込みください。
