ゲームの基本の動きのジャンプを作ってみましょう。
前回はジャンプだけでしたが、今回は歩きながらのジャンプにチャレンジしてみます。
歩きながらジャンプをしたら、山の形の様にジャンプをします。
ジャンプ中は進む向きを変えられないようにします。
ジャンプ(移動なし)についてはこちらの記事もご覧ください
左右に移動しながらジャンプしよう
前回はゲームの動きに欠かせないジャンプを作りました。
はじめと着地直前でスピードが上がり、頂点ではゆっくになるようにしました。
今回の目標は
・今回は左右に移動しながらのジャンプを作っていきます。
・ジャンプした後も、着地までは右または左に進み続けます。
・空中で向きを変えたりはできないようにします。
準備
ステージを作るところと、スプライトを用意するところは前回と全く同じです。
前記事を読んでいる方は「プログラム」までスキップしてください。
プログラムを作る前にステージとスプライトを用意しましょう。
ステージを作る
ジャンプをするという事は地面が欲しいですね。
地面のようなステージがあれば何でもいいのですが、用意された素材にはいいものが無いので作ることにします。
地面はステージの下の方を塗った絵があればいいです。
四角の描画ツールを使って地面っぽい絵をかきましょう。
スプライトを用意する
ジャンプをさせるスプライトを用意します。
なんでもいいので、定番の猫を使います。
キャラが大きいとジャンプする場所がなくなるので、50%ぐらいの縮小しておきます。
プログラム
このプログラムのポイントは、ジャンプをした瞬間に移動中だったかどうかをどうやって見分けるかです。
きれいなプログラムとは言えませんが、「Scratchで作るならこのように作るしかないのかなぁ」といった感じです。
メインの流れ
プログラムが開始されたら初期化を行います。
なくてもいいのですが、前回実行した時のデータが残っていると誤作動をするので、念のため入れておきます。
あとは、落下速度の計算の「重力加速度計算」と落下処理の「落下」、「左右移動」をずっと続けられるようにプログラムを作っています。
「重力加速度計算」「落下」「左右移動」の中身はあとで説明します
「重力加速度計算」は落下速度を計算しています。
物が落ちるときはだんだんスピードが速くなっていきます。
落下時間によってだんだん早くなるスピードを計算するプログラムです。
少し難しいかもしれませんが、物が落ちることについて話をします。
このプログラムではずっと落下の計算を続けています(計算プログラムが動いています)。
実は、このプログラムと同じように私たちもずっと落下の力がかかっています(重力)。
地面や床があるので、それより下に落下しないだけです。
このプログラムではそれと同じことを再現しています。
初期化
絶対に必要な処理ではありませんが、出来れば作っておきましょう。
このプログラムで使う変数をリセットします。
スプライトの位置を調整します。
x座標を0にします。
0にすることで画面の中心に移動します。
y座標を-130にしておきます。
変な位置でスプライトが止まっていると誤作動するかもしれないので、地面に設置する都合がいい場所に移動させておきます。
加速度も0にします。
いきなりスプライトが動き出さないようにします。
重力加速度計算
「重力加速度計算」と難しい言葉を使っていますが。
落下するスピードを計算するブロックです。
加速度という変数に、1度に何マス進むかを設定します。
1なら1回で1マス進みます。
10なら1回で10マス進むので、より早く進むことになります。
黄緑色を地面としているので、黄緑に触れている時はスピード(加速度)を0にします。
地面に触れていない場合は速度を1ずつ減らしていきます(-1)。
なぜ減らすのか(マイナスにするのか)?
マイナスにした方が計算しやすいからです。
落ちる動きなのでy座標の値を減らすようプログラムを作りたいので、マイナスの加速度と考えたほうがプログラムが単純になります。
物が落ちる速さについて話をします。
物は1秒間に9.8メートルの速さで加速しながら落ちていきます。
2秒後には19.6メートルの速さで落ちていきます。
時間がたつごとにどんどん早くなっていきます。
この動きを再現するために、-1ずつ増やすというプログラムにしています。
落下
ジャンプして落下している間は「加速度」ぶんだけ下に移動します。
落下中は「加速度」がどんどん増えていくので、落下スピードが速くなっていくことになります。
ジャンプで上に向かっている時は、上向きのスピードがどんどんゆっくりになっていきます。
X座標の変更で「移動中」ずつ左右に移動します。
地面を移動している時は←→のキーで移動をしますが、ジャンプ中はジャンプをする直前に進んでいた方向に進み続けます。
ゲームではジャンプ中に向きを変えることができたりしますが、今回は向きを変えられないようにします。
左右移動
左右に移動するプログラムを作っていきましょう。
基本的な動きは←キーが押されたらx座標を減らして左に動くようにします。
→キーが押されたらx座標を増やして右に動くようにします。
少し詳しく解説していきます。
まず、緑色に触れている時だけこのプログラムは動作します。
つまり、地面に触れている時だけです。
地面に触れている時のプログラムを解説します。
「移動中」を0にします。
「移動中」という変数を初期化しています。
ジャンプをした瞬間に、どちらの向きにどれくらいの速さで移動していたかを記録するための変数です。
またあとで出てきます。
次は右キーと左キーが押されたときのプログラムです。
右に動くか、左に動くかの違いだけで同じ仕組みです。
まず、「移動中」に3(-3)という値を入れています。
この変数はジャンプ中に右にジャンプするのか左にジャンプするのかを判断するのに使っています。
前にも書きましたが、右に動き場合は0より大きい数字、左に動くときは0より小さい数字にしてください。
x差票をどれだけ増やすか(減らすか)の値です。
今回は3(-3)という数字にしていますが、適当な数字です。
大きければ早く移動するし、小さければゆっくりの移動になります。
3ぐらいの速さが操作しやすいです。
ジャンプする
スペースキーが押されたらジャンプをするプログラムを作ります。
ジャンプができるのは地面に触れている時だけにします。
「黄緑色に触れたなら」のブロックを使わなかった場合、ジャンプ中にさらにジャンプができてしまいます。
変な動きですね。
ジャンプをすると「加速度」を20にします。
「落下」ブロックを見てみましょう。
加速度に20が入っている場合、y座標は20増えることになるので、上向きに動くことになります。
これがジャンプの動きです。
そして、「重力加速度計算」ブロックを見てみましょう。
「加速度」を1ずつ減らしていきます。
20マス上に動いた次は19マス上に動きます。
次は18マス、17マス・・・と、だんだんと動く幅が少なくなっていきます。
そのうち、0マスになってジャンプの頂点になります。
その後は、-1マス、-2マス・・・とどんどんy軸が少なくなる方向に動くことになります。
これがジャンプをしたときに頂点付近ではゆっくり動いて、地面付近では早く動く仕組みです。
コメント