提供: Japanese Scratch-Wiki

2017年8月15日 (火) 06:41時点におけるApple502j (トーク | 投稿記録)による版 (カテゴリ修正)

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

Warning メモ: ジャンプには、 キーが割り当てられることが多いが、Spaceキー、Zキー、Xキー、Wキー、マウスクリックなどでジャンプするゲームも存在する。

シンプルなジャンプ

次のスクリプトでは、スプライトを上に瞬間移動したあと、元の場所に瞬間移動して、ジャンプのように見せている。

@ がクリックされたとき
ずっと
  もし <[上向きの矢印 v] キーが押された> なら //[↑]キーでジャンプ
    y座標を (50) ずつ変える
    (0.5) 秒待つ //一瞬で終わってしまうので、少しだけ待つ
    y座標を (-50) ずつ変える
  end

次に、もう少しだけリアルなジャンプにする方法を紹介する。

@ がクリックされたとき
ずっと
  もし <[上向きの矢印 v] キーが押された> なら //[↑]キーでジャンプ
    (10) 回繰り返す
      (0.01) 秒待つ
      y座標を (10) ずつ変える
  end
    (10) 回繰り返す
      (0.01) 秒待つ
      y座標を (-10) ずつ変える
  end

そのままでは一瞬で実行が終わってしまい飛んでいる様子がわからないので、「y座標を () ずつ変える」ブロックの手前に「() 秒待つ」ブロックを入れて、速度を調節している。

着地判定

スプライトがジャンプした後、地面に着地するスクリプトを見てみよう。このスクリプトでは、飛び上がったあと、地面に触れるまでスプライトが落ち続ける。

@ がクリックされたとき
ずっと
もし <[上向きの矢印 v] キーが押された> なら //[↑]キーでジャンプ
(10) 回繰り返す
y座標を (5) ずつ変える
end
 <[#000000] 色に触れた> まで繰り返す// 地面の色を指定
y座標を (-5) ずつ変える
end
end

重力を考慮したジャンプ

次に、よりリアルなジャンプにするために使われるテクニックを紹介する。このテクニックでは、重力の役目をはたす変数を使って、上下に動く速度を変更している。

@ がクリックされたとき
[y速度 v] を [0] にする //スプライトが上向きに動く速度
ずっと
  y座標を (y速度) ずつ変える

@ がクリックされたとき
ずっと
   ...//プレイヤーが地面の上にいるかどうか確認
  もし<[#000000] 色に触れた> なら // 地面の色を指定
  [y速度 v] を (0) にする
   ...//プレイヤーのジャンプ操作を検知
  もし <[上向き矢印 v]キーが押された> なら
  ...//ジャンプ!
  [y速度 v] を (9.9) にする
  end
  end
  [y速度 v] を (-0.5) ずつ変える // 重力分を減らす


ジャンプ制限と多段ジャンプ

たいていゲームでは、空中ではジャンプできない。Scratchでも、このようにジャンプできる場所を制限することができる。 地面にいるときのみジャンプできる場合は、次のようなスクリプトになる (紫色の「ジャンプ」ブロックは、ジャンプ部分のスクリプトを取り出したカスタムブロックと考えてほしい) 。

@ がクリックされたとき
ずっと
もし<<[上向きの矢印 v] キーが押された> かつ <[#000000] 色に触れた>> なら // ジャンプに使うキーと地面の色を指定
ジャンプ::custom
end

現実には不可能だが、ゲームの世界では2段ジャンプができることも多い。 Scratchでは次のようなスクリプトで2段ジャンプを実現できる (こちらのスクリプトでは、地面の判定をy座標で行っている)。

  @ がクリックされたとき
  ずっと 
    もし <(y座標) < [-60]> なら 
      [y速度 v] を [0] にする
      [ジャンプ回数 v] を [0] にする
      y座標を (-60) にする
    でなければ 
      [y速度 v] を (-0.5) ずつ変える // 空中にいるときは、常に重力で下に落ちる
    end
    y座標を (y速度) ずつ変える
  end

  @ がクリックされたとき
  [ジャンプ回数 v] を [0] にする
  ずっと 
    もし <<[上向き矢印 v] キーが押された> かつ <(ジャンプ回数) < [2]>> なら 
      y座標を (10) ずつ変える
      [y速度 v] を [7] にする
      [ジャンプ回数 v] を (1) ずつ変える
      (0.1) 秒待つ //キーボードの連続入力を避けるため、少しだけ待つ
    end
  end

3段ジャンプ、4段ジャンプを可能にしたい場合は、ジャンプ回数の条件2 をn 34と変化さればよい。

関連項目