
このブログテーマでは、スクラッチの初心者から上級者まで、ちょっとお役に立つ情報を不定期で紹介していきます。
前回は基本的な加速ジャンプを作成してみました。作成した動きは、ジャンプの高さによっては、地面に大きく沈み込んでしまうケースも見られます。これは直前のフレームの高さ(y座標)から、その時に持っている下方向へ向けた速度を引いた値が、着地時のフレームの高さ(y座標)になるため、状況に応じて地面より大きく下方向に沈み込んでしまうという不具合です。
今回はこの不具合を修正する方法をご説明します。
ジャンプの作り方シリーズの記事
下の動画は不定期配信の「ファイブボックス 一分間スクラッチ講座」です。ご興味のある方は併せてご参照ください。
作成済みのスクリプトの確認
前回の動画では次のようなスクリプトを作って、加速ジャンプを実現しました。

このスクリプトで基本的な加速ジャンプはできるのですが、着地した際に体の一部が地面に沈み込んでしまうという状態です。
沈み込みの修正
沈み込みを修正するには、沈んだ分、y座標を上方向に移動させればよさそうですね。
そこで上の右側のスクリプトを次のように修正します。
追加するのは地面の色に付いたとき、変数「ジャンプ力」を0にする、の後の部分になります。
- 地面の色に触れたではない(つまり地面から脱出する)まで以下の処理を繰り返す
- y座標を1ずつかえる(1ずつ上昇する)

これで、沈み込んだ分を戻す処理が完成しました。
戻るときは1ずつ変わるので、かなりゆっくり戻っていくのが気になります。
ブロック定義活用
スクラッチにはこのようなフレームごとの再描画処理をスキップして、結果だけを表示する機能があります。
次の手順で、ブロック定義を作成します。
- 「ブロック定義」グループを選択
- 「ブロックを作る」をクリック
- 表示されたメニューでブロック名に「着地補正」と入力
- 「画面を再描画せずに実行する」にチェックを入れる ※このことでフレームごとの画面描画が実行されず、結果だけが表示されます
- OK ボタンで作成

作成したブロック定義「着地補正」には、「ずっと」ブロックの中に作成済みのスクリプトを丸ごと移動します。
さらに空いた「ずっと」ブロックの内部には、ブロック定義の呼び出しブロックを追加します。

これで地面から浮かび上がるという処理が瞬時に行われるようになります。
ここまでの全体のスクリプトは以下のような感じです。

現段階で空中ジャンプができてしまっています。
次回はこの空中ジャンプを回避するように修正します。
ファイブボックスでは、スクラッチやUnityの個別指導のオンラインレッスンを行っています。
ご興味のある方は当サイト、オンラインレッスンから、無料体験授業へお問い合わせ下さい。