[Pスクール厳選・優良な教材プログラムの紹介コーナー②] 物理エンジンのサンプルプログラムの紹介
※ 当ページには【広告/PR】を含む場合があります。
2020/11/16
プログラムでの物理エンジンとは、物理(力学)運動をできるだけ再現するための計算を提供するための演算処理を行うものです。
2次元(縦と横)ゲームでも、スプライトをとある法則性をもって運動させれば、ジャンプ/落下/衝突などに現実の世界と同じように動いているかのように見せることができるようになります。
今回は他のスクラッチプログラマーの方が公開されている
自分専用の物理エンジンを作る
子供たちに
もし本格的なゲームを作成したい小中学生に物理エンジンを教える際には、「ゲーム中にキャラクターをかっこよく落ちさせる・ジャンプさせる・何かにあたって跳ね返らせる方法」と簡単な話で済むのかも知れません。
物理エンジンを本当に理解出来るようになるには、
力学
ということで、とりあえず数式の話などの小難しい話はこの記事ではおいて、
さて、物理エンジンは、一度作っておくとその後いろいろなゲームで使い回せるゲーム開発には無くてはならないライブラリであり、知っておくと様々なプロジェクトに活用できて、また子供たちの科学の目も養える教材です。
「説明が難しそうだから」という先入観はなしに、積極的にプログラムを組んで教えてあげたいと思っている次第です。
この記事ではいくつかプログラム例を出して、動きの解説と物理エンジンの実装を見ていきたいと思います。
はじめての物理エンジン
スクラッチのウェブサイトのトップメニューから
見る
物理エンジン
たくさんあるので目移りしてしまうのですが、当ライターの独断と偏見で気に入ったものをチョイスしてみます。
まずは最初ですので、理解を進めるために簡単なサンプルのプログラミングの中身を少し詳しく解説させていただくとしましょう。
物理エンジンとして単純で良いサンプルだと思ったのが、
ボールの落下する動きと傾きのついた棒との衝突を確認するためのプログラムで、
🚩
実装はすこぶるシンプルで、まずはオレンジの棒のスプライトの方ですが、スタート時にグローバル変数・
角度

ボールのスプライトの方は、落下しながらオレンジの棒に当たると跳ね返るを繰り返す動きを以下のブロックで実装しているようです。

①では
xの移動量
yの移動量
物理エンジンを抽象化すると、つまるところここで言う
xの移動量
yの移動量
どんな計算を詰めて値として返すかは、プログラマーの腕の見せ所であり、この方は
摩擦
図の②の部分は衝突した時の処理で、棒に衝突した時だけ
xの移動量
yの移動量
xの移動量
この時の
y座標を3ずつ変える
これはスクラッチの物理エンジンにはよく見られるテクニックのようです。
③の部分は棒に当たっていない時=自由落下の状態です。 これは
yの移動量
凝った物理エンジン
もう一つ違ったサンプルも見ていきます。
ボールのスプライトの実装は以下のようになります。

先ほどのサンプルで言うところの
xの移動量
yの移動量
速度x
速度y
ループごとに
速度x
速度y
加速度計算
速度計算
このサンプルではスプライトが回転運動も行わせるための工夫が、
トルク計算
回転速度計算
トルク
物理エンジンに回転運動が加わる場合には、変数・
回転速度
スイミーの物理エンジン
こちらは実践的な例をあげます。 ファンプレーヤーの方も多いスイミーというゲームの作者の方は公開されている
この場合、上キーを押すことでジャンプできるようなスクリプトも物理エンジンに追加されることで、アクションゲームのような動きを再現しています。
キーでスプライトの移動をさせているので、先ほどの物理エンジンと比べてキーの受け付けるタイミングを然るべきブロックの位置におかなければなりません。

①は自由落下の部分です。 壁や床(黒色の背景)に当たっていない場合にゆっくりと落下するようになります。
②は左右に移動するためのキー操作を受け付けます。
③でまずx方向に移動する量を計算して、その分水平にスプライトを移動させています。
④はスプライトが床面に当たった時の処理です。 この部分がないと、スプライトのy方向の移動によって、壁面に一旦めり込むような状態(最大で4)になります。 すると、ずっと当たり判定が真になってしまってプログラムがそのまま動かないことになるのを防ぐために、衝突する直前の位置まで押し戻すの処理のようです。
⑤が衝突時の処理です。 スプライトが跳ね返る時の
速度x
速度y
⑥で垂直方向の移動を行います。 もしこの移動で床面に触れることがあるようなら、⑦のブロックで
速度y
⑧の段階でようやくジャンプさせる処理を受け付けます。
ジャンプを受け付ける場合、壁面に触れていることが条件になりますので、スイミーのあの独特の壁面三角ジャンプができているのはこの部分からなのかなと推測されます。
まとめ
3つの例で物理エンジンのプログラミングのポイントを取り上げてみました。
実際に自分の手でオリジナルの物理エンジンを組んでみると、今までにない面白い動きができるかもしれませんので、ぜひプログラミングにトライしてみてください。