クリーム色の背景、色付き表示、高コントラスト、大きな文字のほうが読みやすいですか?配色と文字を選ぶと、すべてのページに一度で反映されます。

無料レッスン

速度と重力の動き

このレッスンのあとで: 速度と重力を使って、ものを1フレームずつ動かせる。

60分のレッスンコマンド2件ゲーム開発ラボ:ブラウザーでゲームループ、重力、当たり判定を学ぶ

重力は速度を少しずつ増やす

速度は、1フレームに何ピクセル動くかを表す数です。重力は、その速度を毎フレーム少しずつ増やす数で、落ちるほど速くなる動きを作ります。

物理の式を使わなくても、足し算の繰り返しだけで、自然な落下が作れます。

このレッスンのゴール

メモ

速度と重力を使って、ものを1フレームずつ動かせる。

重要な言葉

ことばいみれい
速度1フレームに動く長さ
重力毎フレーム、速度に足される数GRAVITY
ピクセル画面を作る、小さな点の1つ
ステップ1フレーム分の計算
反発係数はね返ったあとに、速さが残る割合

学生が入力するセルは、このプレビューでは空白です。

速度を増やしてから、位置を進める

ラボの星は、毎フレーム、2つの計算を順に行います。まず、速度に重力を足します。次に、その速度の分だけ、位置を下へ進めます。

重力が足すのは位置ではなく、速度です。だから、星は落ちるほど速くなります。

例: 重力0.15で落ちる星

フレーム速度位置(上からの長さ)
10.150.15
20.300.45
30.450.90
40.601.50
50.752.25

学生が入力するセルは、このプレビューでは空白です。

例: 星を5フレーム落とす

コード: web
<p id="out"></p>

ラボで、10フレーム分の落下を見る

ラボのスクリプト fall.py は、game.js の GRAVITY を読み、星を10フレーム落とします。スクリプトが出す言葉は英語です。

最初に gravity 0.15 と出て、次に frame 1 から frame 10 まで、速度 speed と位置 y が1行ずつ出ます。10フレーム目は、速度1.50、位置8.25です。

星の落下を10フレーム見る

コマンド
docker exec jupyter python3 steps/fall.py

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

落ちた長さは速度の合計になる

位置は、これまでの速度を全部足した数です。10フレーム目までの速度は、重力の1倍から10倍まで増えます。

1から10までの合計は55なので、落ちた長さは、0.15の55倍で8.25です。表の最後の行と一致します。

例: 1からnまでの合計

フレーム数1からその数までの合計落ちた長さ
360.90
5152.25
10558.25

学生が入力するセルは、このプレビューでは空白です。

速度と位置を変える行を探す

grep -n star.speed は、star.speed を含む行を出します。ラボを変えていなければ、74行目と75行目の2行が出ます。1行目が速度を増やす行、2行目が位置を進める行です。

速度と位置の行を探す

コマンド
docker exec jupyter grep -n star.speed game/game.js

ここでは表示のみで、実行されません。無料アカウントを作成すると、実行ボタンで自分のラボのターミナルに入力できます。

よくある間違い

注意

重力は、位置を毎フレーム同じ長さだけ動かす数だと考える人がいます。重力が足すのは速度です。位置の動きは、フレームごとに大きくなります。位置に直接足すと、一定の速さで落ちる、不自然な動きになります。

はね返りは向きを逆にして弱める

ラボの星は、はね返りません。下まで落ちると命が減って消えます。ここでは、ボールが床ではね返る動きを、このレッスンの例として作ります。

床に着いたら、位置を床に戻します。速度の向きを逆にして、反発係数を掛けます。

例: 床ではね返るボール

コード: web
<p id="out"></p>

このラボとソースについて: ゲーム開発ラボ:ブラウザーでゲームループ、重力、当たり判定を学ぶ

授業で使いますか?このモジュールを学生に割り当てると、教員用ガイド、自動採点つきの課題、学生ごとのラボを使えます。