Step 03 of 12
自由落下
ブロックを 1秒で 1マス 自動的に落下させます。
ここで初めて「時間」の概念が登場 — update(double dt) が毎フレーム呼ばれるので、
経過時間を累積していって、1秒溜まったら行を1つ下げる、という仕組み。
About this step
何が新しくなった?
update(double dt) メソッドが登場します。
dt は「前フレームから今フレームまでの経過秒数」。
16ms に一度くらい呼ばれるので、dt は大抵 0.016 前後です。
accumulator という変数に dt をどんどん足していき、
合計が 1 秒を超えたタイミングで blockRow++。
このパターンは「時間で何かを起こしたい」時の定石です。
update と render の分業
update(dt)— 状態(位置、時間、スコアなど)を更新render(screen)— 現在の状態をそのまま絵にする- render は状態を変えてはいけない — 見た目の責務だけを持つ
動かしてみる
Run Java を押すと、ブロックが1秒ごとに1マスずつ下に動いていきます。 下に着いたら上に戻る(ループ)のは今だけの挙動 — Step 5 で「床に着いたら止まる」判定を入れます。
試しにコードの DROP_SECONDS = 1.0 を 0.25 に変えれば、4倍速の落下になります
(エディタ実装後に試せるようになります)。