提供:Japanese Scratch-Wiki

< 物理エンジン

これはひらがな記事です。元記事に戻る

ぶつりエンジン とは、ぶつりてきなうんどうのようすをけいさんしてひょうじするためのはんようてきなプログラムのことである。ここでいううんどうには、ジャンプ、らっか、はねかえりなどがふくまれる。ぶつりエンジンは、いろいろなばめんできょうつうするぶつりげんしょうをあつかうため、いちどさくせいしておけば、ほかのさまざまなプロジェクトでかつようして、おなじようなスクリプトをなんどもつくるてまをはぶくことができる。すぐれたぶつりエンジンは、おおくのScratcherによってりようされることがおおい。このきじでは、Scratchでしようできるぶつりエンジンのれいをしょうかいする。

Warning
メモ:
ここにきさいのサンプルはあくまでぶつりエンジンのいちれいである。

サンプル

このサンプル[1] は、1つのスクリプトでできており、よういするコスチュームも1つでかまわない。つぎのようなぶつりうんどうにたいおうしている。

  • ゆかがすいへいであっても、しゃめんであっても、ゆかにあわせていどうする
  • ジャンプする
  • とくていのいろとのしょうとつはんてい (スプライトにあわせてへんこう)

いかのスクリプトは、ぶつりうんどうをおこなうスプライトにきじゅつする。

@greenFlag が押されたとき::events hat
[x速度 v] を (0) にする // 左右スピードを0にする
[y速度 v] を (0) にする // 上下スピードを0にする
ずっと 
  もし <[右向き矢印 v] キーが押された> なら // スプライトを右に動かす
    [x速度 v] を (1) ずつ変える // "x速度" は左右の移動スピードなので、これが1増えると右向きの移動速度が1速くなる
  end 
  もし <[左向き矢印 v] キーが押された> なら // スプライトを左に動かす
    [x速度 v] を (-1) ずつ変える // 左向きの移動速度が1早くなる
  end
  [x速度 v] を ((x速度) * (0.9)) にする // 速度が速くなりすぎないよう、徐々にスピードを落とす
  x座標を (x速度) ずつ変える // スプライトを実際に動かす
  もし <[#1B2BE0] 色に触れた> なら // 坂道や壁にぶつかったとき
    y座標を (((x速度)の[絶対値 v]::operators) + (1)) ずつ変える // 横向き速度が速ければ速いほど、坂を登るスピードも速い
    もし <[#1B2BE0] 色に触れた> なら // 坂道の傾斜が大きすぎるとき
      y座標を ((0) - (((x速度)の[絶対値 v]::operators) + (1))) ずつ変える // 坂を登った分を戻す
      x座標を ((0) - (x速度)) ずつ変える // 直前のx座標 (坂の下) まで戻す
      [x速度 v] を ((x速度) / (2)) にする // 坂道と壁にぶつかると、速度が落ちる
    end // 
  end //
  もし <[上向き矢印 v] キーが押された> なら 
    y座標を (-1) ずつ変える // 通常、スプライトはプラットフォーム (地面) の1ピクセル上にいるため、地面の上にいるかどうかをチェックするには、y座標を1減らす必要がある
    もし <[#1B2BE0] 色に触れた> なら // プラットフォーム上にいれば
      [y速度 v] を (10) にする // ジャンプに必要なスピードを追加
    end
    y座標を (1) ずつ変える // 地面の上にいるかどうかを確認するときにy座標を1減らしたので、ここで1増やして元に戻しておく
  end
  もし <(y速度) < (3)> なら // ジャンプの最高点あたりにいるときと、落下しているとき
    y座標を (-1) ずつ変える // プラットフォーム上にいるかどうかをチェック
    もし <<[#1B2BE0] 色に触れた> ではない> なら //プラットフォーム上にいなかったとき
      [y速度 v] を (-1) ずつ変える // 重力を加えて、着地スピードを速くする
    end
    y座標を (1) ずつ変える // 先ほどy座標を1ピクセル減らしたので、ここで元に戻す
  end 
  [y速度 v] を ((y速度) * (0.9)) にする // 現実の物理運動のように、速度を徐々に変化させる
  y座標を (y速度) ずつ変える // 1つ前のブロックで設定した速度を、ここでスプライトの座標に適用して、実際にスプライトを上下に動かしている
  もし <[#1B2BE0] 色に触れた> なら // 床や天井に触れたとき
    y座標を ((0) - (y速度)) ずつ変える // 移動方向を逆にする
    [y速度 v] を ((y速度) / (2.5)) にする // 衝突後は、上下のスピードをスプライトがほぼ止まるくらいまで大幅に減らす
  end //
end

ただし、このスクリプトではジャンプしたあとのぶぶんでバグがはっせいすることがある。ちゃくちちてんがかべのすぐちかくのばあい、ゆかから1ピクセルいじょうはなれたばしょでとまってしまう (それいじょうジャンプできなくなる)ことがあるてんだ。このばあい、がめんのはしにいどうすると、スプライトいちがたしょうしずんで、もとどおりそうさできることがおおい。

かんれんこうもく

さんしょう

Cookieは私達のサービスを提供するのに役立ちます。このサービスを使用することにより、お客様はCookieの使用に同意するものとします。