提供:Japanese Scratch-Wiki
スプライトをジャンプさせる方法はいくつか存在するが、やり方によってどのようなジャンプになるかが異なる。ここでは、単純に上下に動くだけのものから、重力を考え本当のジャンプのように見せるものまで、いくつかの方法を紹介していく。

シンプルなジャンプ
次のスクリプトでは、スプライトを上に瞬間移動したあと、元の場所に瞬間移動して、ジャンプのように見せている。
@greenFlag が押されたとき::events hat ずっと もし <[上向きの矢印 v] キーが押された> なら //[↑]キーでジャンプ y座標を (50) ずつ変える (0.5) 秒待つ //一瞬で終わってしまうので、少しだけ待つ y座標を (-50) ずつ変える end
次に、もう少しだけリアルなジャンプにする方法を紹介する。
@greenFlag が押されたとき::events hat ずっと もし <[上向きの矢印 v] キーが押された> なら //[↑]キーでジャンプ (10) 回繰り返す (0.01) 秒待つ y座標を (10) ずつ変える end (10) 回繰り返す (0.01) 秒待つ y座標を (-10) ずつ変える end
そのままでは一瞬で実行が終わってしまい飛んでいる様子がわからないので、「y座標を () ずつ変える」ブロックの手前に「() 秒待つ」ブロックを入れて、速度を調節している。
着地判定
スプライトがジャンプした後、地面に着地するスクリプトを見てみよう。このスクリプトでは、飛び上がったあと、地面に触れるまでスプライトが落ち続ける。
@greenFlag が押されたとき::events hat ずっと もし <[上向きの矢印 v] キーが押された> なら //[↑]キーでジャンプ (10) 回繰り返す y座標を (5) ずつ変える end <[#000000] 色に触れた> まで繰り返す// 地面の色を指定 y座標を (-5) ずつ変える end end
重力を考慮したジャンプ
次に、よりリアルなジャンプにするために使われるテクニックを紹介する。このテクニックでは、重力の役目をはたす変数を使って、上下に動く速度を変更している。
@greenFlag が押されたとき::events hat [y速度 v] を [0] にする //スプライトが上向きに動く速度 ずっと y座標を (y速度) ずつ変える @greenFlag が押されたとき::events hat ずっと ...//プレイヤーが地面の上にいるかどうか確認 もし<[#000000] 色に触れた> なら // 地面の色を指定 [y速度 v] を (0) にする ...//プレイヤーのジャンプ操作を検知 もし <[上向き矢印 v]キーが押された> なら ...//ジャンプ! [y速度 v] を (9.9) にする end end [y速度 v] を (-0.5) ずつ変える // 重力分を減らす
ジャンプ制限と多段ジャンプ
たいていゲームでは、空中ではジャンプできない。Scratchでも、このようにジャンプできる場所を制限することができる。 地面にいるときのみジャンプできる場合は、次のようなスクリプトになる (紫色の「ジャンプ」ブロックは、ジャンプ部分のスクリプトを取り出したカスタムブロックと考えてほしい) 。
@greenFlag が押されたとき::events hat ずっと もし<<[上向きの矢印 v] キーが押された> かつ <[#000000] 色に触れた>> なら // ジャンプに使うキーと地面の色を指定 ジャンプ::custom end
現実には不可能だが、ゲームの世界では2段ジャンプができることも多い。 Scratchでは次のようなスクリプトで2段ジャンプを実現できる (こちらのスクリプトでは、地面の判定をy座標で行っている)。
@greenFlag が押されたとき::events hat ずっと もし <(y座標) < [-60]> なら [y速度 v] を [0] にする [ジャンプ回数 v] を [0] にする y座標を (-60) にする でなければ [y速度 v] を (-0.5) ずつ変える // 空中にいるときは、常に重力で下に落ちる end y座標を (y速度) ずつ変える end @greenFlag が押されたとき::events hat [ジャンプ回数 v] を [0] にする ずっと もし <<[上向き矢印 v] キーが押された> かつ <(ジャンプ回数) < [2]>> なら y座標を (10) ずつ変える [y速度 v] を [7] にする [ジャンプ回数 v] を (1) ずつ変える (0.1) 秒待つ //キーボードの連続入力を避けるため、少しだけ待つ end end
3段ジャンプ、4段ジャンプを可能にしたい場合は、ジャンプ回数の条件2 を 3、4と変化させればよい。