このブログテーマでは、スクラッチの初心者から上級者まで、ちょっとお役に立つ情報を不定期で紹介していきます。
今回から数回、ジャンプの方法についてご説明していきます。まずは基本的な加速ジャンプの方法。加速ジャンプとは重力が働くジャンプのことで、飛び出す瞬間に最も上向きの力が大きく、徐々に重力によって速度が減速、最高到達点で上向きの力が0になります。あとは重力でマイナスの力が大きくなって、速度を上げながら落下するというもの。
下の動画は不定期配信の「ファイブボックス 一分間スクラッチ講座」です。ご興味のある方は併せてご参照ください。
事前準備
まずは完成版をご確認ください。
このサンプルでは、着地を色で判定します。地面の色がはっきりわかる「Blue Sky」という背景画像を指定します。
変数を2つ用意します。
キャラクターのY座標上の移動量を管理する「ジャンプ力」
その「ジャンプ力」に下向きの力を与える「重力」
スクリプトの作成
1つ目のスクリプトを作成します。
旗が押された後に以下の処理を実行
- x座標とy座標の初期化(地面より上の任意の場所に指定します)
- 変数「ジャンプ力」を0でリセット
- 変数「重力」にマイナスの値をセット、サンプルでは-1に指定 ※このマイナスの値が大きいほど重力が強くなります
- ずっと繰り返し以下の処理を実行
- もし上向き矢印キーがおされたら
- ジャンプ力を15に指定 ※大きな値にするほど、高く飛びます
- 上向き矢印キーが押されて無い状態(離される)まで待つ※押し続けるとそのまま上空に上がっていきます
- もし上向き矢印キーがおされたら
最後のブロックで待ち時間が入りました。待ち時間があると、ずっとの中の処理は一時停止します。継続して処理を続けたい場合は、別の「ずっと」を作成します。これを「並列処理」と呼びます。
もう一つの繰返し処理の中では次の処理を行います。
- ずっと以下の処理を実行
- y座標を変数「ジャンプ力」(yの移動量)ずつ変更
- もし地面の色に触れたら※地面の色はスポイト機能で取得します
- 「ジャンプ力」を 0 に指定(yの移動なし)
- そうでなければ(空中にいたら)
- 「ジャンプ力」を「重力」ずつ変える※下向きの力を徐々に大きくする
確認
いったん完成しました。動きを確認してみましょう。
ちゃんとジャンプすると思います。しかし初期位置によっては、または空中でジャンプした時など、時々地面に足が沈んでしまいます。
スクラッチのずっとの中では、1秒間に数十回の処理が行われています。ずっとの中の1つ1つの処理をフレームと呼びます。
下の右側の図では地面に触れていますが、左側ではまだ地面に触れていません。
左側の着地の直前、この時例えばジャンプ力が -15 だったとします。その場合、次のフレームでは現在の場所から15だけ下に移動します。そうすると、右図の様に地面に沈んでしまいますよね。
これを快活するには、沈んだ分戻すという処理が必要になります。
次回はこの内容を解説します。
ファイブボックスでは、スクラッチやUnityの個別指導のオンラインレッスンを行っています。
ご興味のある方は当サイト、オンラインレッスンから、無料体験授業へお問い合わせ下さい。