テトリミノの固定に猶予を持たせる
接触後、すぐに固定すると操作がしづらい。固定するまでに猶予時間を与えることにする。
- 落下判定。
落下判定が偽なら、遅延フラグを真にする。真なら、遅延フラグを偽にする。遅延カウントはそのまま。
遅延フラグが真の間は遅延カウントを1ずつ減らす。また、落下キーを押されたら、遅延を終了にする。
- 遅延カウントが正なら、再び落下判定に戻る。負なら遅延を終了する。
遅延フラグが偽なら、再び落下判定に戻る。
//最大猶予 private static readonly int delayLimit = 50; //遅延カウント private int delayCount; //キー入力で遅延を終了する為のフラグ private bool isDelaying; private void Update() { CheckInput(); mover.Fall(speed); if (!mover.CanMove()) { isDelaying = true; delayCount--; //固定位置修正 mover.AdjustToAbove(); if (delayCount < 0) { //操作をできなくする enabled = false; //位置固定 field.Fix(); //列消去 int cnt = field.DeleteLines(); //スコア、レベルなど更新 if (cnt > 0) UpdatePlayData(cnt); //落下終了イベント OnFalled(); } } else { isDelaying = false; } } private void CheckInput() { //長押し入力処理 KeyInputReceiver.Update(); if (Input.GetKeyDown(KeyCode.DownArrow)) { //遅延中にキー入力があったら即、遅延を終了する if (isDelaying) delayCount = -1; else speed = maxSpeed; } }