スポンサーリンク
Scratch

スクラッチ(scratch)でジャンプをさせる

Scratch

ゲームで基本的な動きに「ジャンプ」がありますね。
キャラクターをジャンプさせるにはどんなプログラムを作ればいいのでしょうか。
作ったけど、なにか動きが不自然だったりしませんか。
今回は、まっすぐ上にジャンプするキャラクタを作ってみます。

スポンサーリンク

自然な動きのジャンプをしてみよう

ゲームを作るときに基本の動きとなる「ジャンプ」です。
基本的な動きですが、作る尾は結構手間がかかります。

大まかな仕組みは次の通りです。
1.何かボタンを押すとy座標の値を増やす
2.増やしたy座標まで一定時間で移動させる
3.y座標を元の値に戻す
4.戻したy座標まで一定時間で移動させる

ただ、このままではジャンプとしては不自然な動きです。
ジャンプをしたときには、ジャンプの頂点ではゆっくり動き、ジャンプの直後と着地の直前では早く動きます。
このようなジャンプの動きを作ってみましょう。

↓のプログラムで「スペース」を押してジャンプさせてみてください。
わかりにくいですがジャンプ中にスピードが変わるので自然な動きになっています。

※今回はジャンプだけですが、次回は歩きながらのジャンプを作ります。

プログラム

プログラムを作る前にステージとスプライトを用意しましょう。

ステージを作る

ジャンプをするという事は地面が欲しいですね。
地面のようなステージがあれば何でもいいのですが、用意された素材にはいいものが無いので作ることにします。
地面はステージの下の方を塗った絵があればいいです。
四角の描画ツールを使って地面っぽい絵をかきましょう。

スプライトを用意する

ジャンプをさせるスプライトを用意します。
なんでもいいので、定番の猫を使います。
キャラが大きいとジャンプする場所がなくなるので、50%ぐらいの縮小しておきます。

スプライトのプログラム

プログラムの全容です。
今回はまっすぐジャンプするだけなので、プログラムの量は少ないです。
でも、いろいろな工夫をしています。

メイン処理(基本の流れ)

プログラムの中身はブロックにして別に作っています。
だた、ここで基本的な動きを作っています。

「初期化」ブロックでは「変数」を値を0にしたりスプライトの位置をもとの場所に戻します。
なくてもいいですが、誤作動をさせないために念のため作ります。

あとは、「ずっと」部品を使って永遠に処理を繰り返しています。
内容はスプライトが落下するプログラムです。

「重力加速度計算」ブロックではスプライトが落下するスピードを計算しています。
地面より下に落下しないように、地面に触れるとスピードを0にしています。

「落下」ブロックでは「重力加速度計算」で計算した分だけy座標を変更するプログラムです。

少し難しいかもしれませんが、物が落ちることについて話をします。
このプログラムではずっと落下の計算をしています(プログラムが動いています)。
実は、私たちも絶えず落下の力がかかっています(重力)。
地面や床があるので、それより下に落下しないだけです。
このプログラムではそれと同じことを再現しています。

初期化

絶対に必要な処理ではありませんが、出来れば作っておきましょう。
このプログラムで使う変数をリセットします。

スプライトの位置を調整します。
y座標を-130にしておきます。
変な位置でスプライトが止まっていると誤作動するかもしれないので、都合がいい場所に移動させておきます。

加速度も0にします。
いきなりスプライトが動き出さないようにします。

重力加速度計算

「重力加速度計算」と難しい言葉を使っていますが。
落下するスピードを計算するブロックです。
加速度という変数に、1度に何マス進むかを設定します。
1なら1回で1マス進みます。
10なら1回で10マス進むので、より早く進むことになります。

黄緑色を地面としているので、黄緑に触れている時はスピード(加速度)を0にします。

地面に触れていない場合は速度を1ずつ減らしていきます(-1)。
なぜ減らすのか(マイナスにするのか)?
マイナスにした方が計算しやすいからです。
落ちる動きなのでy座標の値を減らすようプログラムを作りたいので、マイナスの加速度と考えたほうがプログラムが単純になります。

物が落ちる速さについて話をします。
物は1秒間に9.8メートルの速さで加速しながら落ちていきます。
2秒後には19.6メートルの速さで落ちていきます。
時間がたつごとにどんどん早くなっていきます。
この動きを再現するために、-1ずつ増やすというプログラムにしています。

落下

先ほどの重力加速度計算ブロックで計算した「加速度」の値だけy座標を変更します。

ジャンプをする

スペースキーが押されたらジャンプをするプログラムを作ります。
ジャンプができるのは地面に触れている時だけにします。
「黄緑色に触れたなら」のブロックを使わなかった場合、ジャンプ中にさらにジャンプができてしまいます。
変な動きですね。

ジャンプをすると「加速度」を20にします。
「落下」ブロックを見てみましょう。
加速度に20が入っている場合、y座標は20増えることになるので、上向きに動くことになります。
これがジャンプの動きです。

そして、「重力加速度計算」ブロックを見てみましょう。
「加速度」を1ずつ減らしていきます。
20マス上に動いた次は19マス上に動きます。
次は18マス、17マス・・・と、だんだんと動く幅が少なくなっていきます。
そのうち、0マスになってジャンプの頂点になります。
その後は、-1マス、-2マス・・・とどんどんy軸が少なくなる方向に動くことになります。

これがジャンプをしたときに頂点付近ではゆっくり動いて、地面付近では早く動く仕組みです。

コメント

タイトルとURLをコピーしました