横移動をするゲームで、ジャンプをする動きを解説します。
以前作成したゲームのプログラムを使って解説します。
繰り返しと判定が何度も登場して難しいプログラムの様に見えますが、そんなに多くのことはやっていません。
何点かのポイントを理解するとジャンプの動きが作れるようになります。
ジャンプをする
以前作った「Scratchでジャンプで敵をよけてゴールするゲームを作る」のジャンプのプログラム部分を詳しく解説していきます。
このプログラムでは、
・地面に接地している時ジャンプができる
・ジャンプの移動速度と地面の位置の関係
・地面に接地していないときは、落下し続ける
という動きがポイントとなっています。
地面に接地しているか、ずっとチェック
ジャンプのプログラムは、ゲームの開始したら「ずっと」処理を繰り返しています。(赤枠部分)
繰り返しの中では、大きく2つのことをしています。(青枠部分)
地面に接地しているば場合にジャンプができる判定。(青枠上側)
ジャンプができるかの判定はこの部品です。
キャラクタの足を青く塗っているので。青白が地面の黄緑に触れている場合に地面に接地していると判定します。
青色がはいいる鬼触れている場合は、土管の上に立っている場合です。
土管の上も地面と判定します。
黄緑かが灰色のどちらかに触れていたら地面に接地とみなすので「または」部品でつないでいます。
地面に接地していない場合は、落下し続ける処理です。(青枠下側)
落下処理
ジャンプの前に、簡単な落下処理を説明します。
メインの処理は「y座標を-3ずつ変える」の部分です。
地面に接地していなければ、下方向に移動(落下)します。
これは、
・ジャンプの頂点から落ちてくるとき
・高いところから落ちてくるとき
の動きをするためのプログラムです。
-3ずつ移動しているのは、ジャンプするときのスピードと同じにしています。
ジャンプを3ずつ移動にしている理由は2つあります。
・操作しやすいスピードにするため
・高さの違う地面に飛び移ったとき、地面にめり込む量を少なくするためです。
ジャンプの数値は大きくするとスピードが上がります。小さくすると、ゆっくりになります。
早い方(5~10ぐらい)が自然なジャンプの動きに見えます。
ただし、大きくすると高さが違う地面に移動した時に、地面にめり込む現象が起きます。
この現象を目立たなくするには、数値を小さくします。
スピードとめり込み現象のバランスをとって数値を決めてください。
「x座標を移動速度ずつ変える」は自然な動きをするための仕掛けです。
ジャンプや落下の直前に左右の移動をしていた場合に、斜めにジャンプしたり、斜めに落ちてくる動きをしています。
左右移動のプログラムの中で、変数を設定しています。
ジャンプ処理
メインのジャンプ処理を解説します。
先ほど説明した通り、全体を
で囲っています。
地面に接地している時だけ有効なプログラムです。
地面に接地している時だけ、スペースキー(ジャンプ)が押されたことを判定します。
スペースキーが押されたら、ジャンプの高さを決めます。
落下のところで説明しましたが、このぷrグラムではy座標を3ずつ変えることにしています。
この3を何回繰り返すかを決めています。
ここでは40にしたのでジャンプの高さは120という事になります。
このジャンプの動きをしているのがこのプログラムです。
y座標を1回3移動するごとに「ジャンプ回数」を減らしていき、0になるまで繰り返します。
ジャンプの動きをもっと自然に見せるためには、
・ジャンプの開始は早く、頂点に近づくとゆっくりにする。
・落下は時間とともにどんどん早くする
という動きをさせることです。
ただ、この場合、地面にめり込む現象を防ぐのはとても難しくなります。
参考までに、次の記事もご覧ください。
この部分は、例外的な動きを想定しています。
ジャンプしている最中に天井(上の足場)にぶつかったらジャンプを中止する処理をしています。
この処理が無かったら、天井を突き抜けてジャンプしてしまいます。
さいごに
ジャンプをするときのポイントは次のようになります。
繰り返しと判定処理が入れ子になって難しいプログラムに見えますが、あまり多くのことはやっていませんのでチャレンジしてみてください。
1.
地面に接地していることを判定して、ジャンプさせる
2.
ジャンプをするときの座標の変更は、スピードと地面へのめり込みの兼ね合いで調整する。
動きが不自然に見えない範囲で、なるべく小さいほうがいいです。
3.
ジャンプ中に天井に触れたら、ジャンプを止める
4.
左右に移動している時にジャンプしたら、斜めにジャンプする
コメント