はじめに
目次

今回はスクラッチキャットをジャンプをさせてみようと思います!
Scratchを使っている人なら、誰もがキャラクターがジャンプするプログラムを作ろうと思ったことはあるはずです。
そこで本記事で、簡単なジャンプから、ふんわりジャンプ、2段ジャンプ・回転ジャンプの作り方など様々なジャンプに関して扱っていきます。
作っているゲームにこのジャンプのプログラムを使えば、問題なく作動すると思います。
実装
準備
それではスクラッチキャットに、プログラムを追加していきましょう。
まず「イベント」の「旗が押された時」を用意します。
そして初期座標を設定してあげます。この座標は、下の方であれば何でも良いです。
座標がわからない人は以下リンクを、参考にしてください。
そしてその下に「制御」から「ずっと」を用意し、「もし〜なら」を挿れましょう。
そして「もし〜なら」の間に、自分がジャンプに使いたいキーを挿れます。
今回はスペースキーにします。そのため「調べる」から、「スペースキーが押された」を用意します。
そして「もしスペースキーが押されたなら」とします。

ジャンプをするための準備のプログラム
これで準備終了です。
簡単なジャンプ
最も簡単なジャンプは、制御の「〜回繰り返す」と「動き」の「y座標を〜ずつ変える」を用います。
「y座標を100ずつ変える」と「y座標を-100ずつ変える」を組み合わせても、同じではないかと思うでしょう。確かに計算上は同じですが、こちらではうまくいきません。
これはy座標を100ずつ変えると即座にy座標を-100ずつ変えてしまうからです。そのため実際には、スクラッチキャットは動きません。

最も簡単なジャンプの方法
ふんわりジャンプ
上の方法では、ふんわりジャンプしません。
その理由は、重力を考えてないためです。
地球上でものを上に投げると、だんだん上に行く速さは遅くなっていきます。これは地球から、常に引っ張り続けられているためです。そのため複数の方法で、この”重力っぽい”ものを表現しようと思います。
方法1
それでは、先程のプログラムに変数を用いて作っていきます。
変数の説明は、下記リンクより勉強して頂ければ幸いです。
まず変数「ジャンプ」を作ります。

変数を作る
次に、「ジャンプ」と入力しましょう。
日本語を入力するときは、「全角」にしましょう。

ジャンプと入力しよう
ここからは一度数字しか入力しないため、「半角」に戻してください。
今回y座標を~ずつ使えるの値を、20→18→16→14→12→10→8→6→4→2→0→-2→-4→-6→-8→-10→-12→-14→-16→-18→-20と変化する様にします。
ジャンプは、これらの変化する値を入れておくために用意したものになります。変数はこの様に、数字が入れ替わるものに対して用意しましょう。
まず変数の基本的な使い方として、変数に最初の値を代入します。これを初期化と言います。

変数を初期化しよう
次に10回繰り返すを1つ消し、21回繰り返すに変更します。なぜ21回というと、下の数字が21個あるからです。
20→18→16→14→12→10→8→6→4→2→0→-2→-4→-6→-8→-10→-12→-14→-16→-18→-20

ループの削除
さらにこれらの数字は、
20→18→16→14→12→10→8→6→4→2→0→-2→-4→-6→-8→-10→-12→-14→-16→-18→-20
と、-2ずつ小さくなっています。
それでは変数を利用していきましょう。「y座標を~ずつ変える」の下に、変数「ジャンプ」を代入します。
そこで、「変数」から「ジャンプを1ずつ変える」を用意して、「y座標を~ずつ変える」の下に挿れます。そして値を”-2″に変更しましょう。

変数を用いたジャンプの作り方
これで先程より良くなったと思いますが、まだ物足りません。より改善していきましょう。
方法2
ここからは、発展的な内容になります。先程は2ずつ早さが変化するようにしました。
しかしこれではまだ世の中の挙動と異なります。今回の挙動は、運動方程式に従うものです。
ただこの内容は、高校物理のレベルであるため割愛致します。ただそれに模倣したものを作っていきます。
変数「カウント」を作ります。初期値を、0にします。
このカウントは簡単にいうと、タイマーの様なものです。今ループの何回目なのかを数えるものです。ループインデックスとも、呼ばれます。
今回はジャンプを始めてから、どれくらい経過したか記録するものになります。
「ジャンプを-2ずつ変える」を、「y座標をジャンプずつ変える」の上に持ってきてください。そして「-2」を10-カウントに変更しましょう。
y座標をジャンプずつ変える」の下に、「カウントを1ずつ変える」を挿れます。

運動方程式を模倣したふんわりジャンプ
これでふんわりジャンプすることが出来ます。
しかしジャンプの高さを調整するのに、色々な変数をいじらないといけないです。そこで変数を一つ増やし、一つの変数をいじれば他の変数も全て数字が変わるように変更していきます。
変数「初速」を用意します。

変数「初速」を作る
まず変数「初速」の初期化を行いましょう。
初速はジャンプの初期値である10に設定します。

変数「初速」の初期化をしよう
それではこの変数「初速」を使って、10と書かれている箇所に変数「初速」を挿れていきましょう。
「ジャンプを〜にする」の初期化部分と、ループ内の「ジャンプを〜にする」に初速を挿れましょう。

変数「初速」の挿入
次に「21回繰り返す」の”21″を変更します。これも実は初速10に関係しています。
2*初速+1になるように、実は21は設定していました。そのため「21回繰り返す」の”21″を、”2*初速+1″に変更しましょう。

ふんわりジャンプ完成版
こうすることで、変数初速の値をコントロールするだけでジャンプを調整するように出来るようになります。
この様に出来る限り、変数を用いながら出来る限り手入力をせずに調整出来る様になることはプログラムを学んでいく上では大切なことです。
回転ジャンプ
おまけ的に挿れてみました。
ジャンプ中に、1回転する様にしてみましょう。円は1周何度かわかるでしょうか?
答えは、360です。
そのため1回転するためには、ループ21回の間で360度動けば良いということです。そこで「動き」の「〜度回す」を用意し、360/初速*2+1としましょう。

回転ジャンプ完成
2段ジャンプ
最後に2段ジャンプを作ります。
2段ジャンプとは、1回目ジャンプした後、着地したとき1回目より高く飛べることを言います。
回転のプログラムは取り除いていますが、そのままで良い人はそのままやってもらっても大丈夫です。
今回ブロック定義を使います。ブロック定義を知らない方は、下記リンクで学習頂けると嬉しいです。
まずブロック定義を選択し、ブロックを作るをクリックし、「ジャンプ」と入力します。
まだOKを押さないで下さい。

ブロック定義「ジャンプ」の作成
次に引数を追加します。
引数によって、ブロック定義内の処理を変化させることが可能です。
真ん中の真偽値をクリックしましょう。
初期設定でbooleanとなっています。booleanは、真偽値の意味です。
そのままクリックしましょう。

引数「真偽値」の追加
そして「OK」を押してください。
そして「もしスペースキーが押されたなら」で囲まれていたプログラムを、ジャンプの下にくっつけます。

ジャンプのプログラムをくっつける
そして引数booleanによって、変数「初速」を切り替えます。
booleanとは、trueとfalseの値しかとりません。trueは正しい、falseは正しくないという意味です。
正しい時というのは今回は2段ジャンプをする条件を満たした時、正しくないとときは2段ジャンプをする条件を満たしてない時です。

引数booleanによる初速の分岐
2段ジャンプは、1回目のジャンプをした後0.5秒経たないうちにスペースキーがもう一度押されたときに発生するようにします。
「調べる」のタイマーを選び0.5より小さいという条件を加えます。

2段ジャンプの条件をつける
しかしこれでは、うまくいきません。なぜならタイマーはずっと動き続けているからです。
そのため地面についたタイミング、着地したときに「調べる」の「タイマーをリセット」を挿れてあげましょう。

タイマーをリセットを追加する
これで2段ジャンプが完成します。
最後に
今回さまざまなジャンプの方法を作成しました。色々変数の中身を変更してあげましょう。
自分のタイミングなどを工夫して、ゲームに合ったジャンプを作りましょう。
コメント