#カウントダウンタイマーを作りたい

1 messages · Page 1 of 1 (latest)

minor storm
#

設定したタイムを表示させてからカウントダウンをスタートさせたいです。
今のでもできてますが、アクションバーの初回表示 という部分をなくしてできるようにしたい。
(チャットGPT頼りで作ってるので変なところあるとおもいます)

function startCountdown(player, timeLeft) {
  playerTimers.set(player.name, timeLeft);

  // スタートのタイトル表示(即時)
  player.runCommandAsync(`titleraw @a title {"rawtext":[{"text":"§6 スタート!"}]}`);

  // アクションバーの初回表示(即時)
  const initialTimeString = formatTime(timeLeft);
  player.runCommandAsync(
    `titleraw @a actionbar {"rawtext":[{"text":"§b残り時間:${initialTimeString}"}]}`
  );

  // 1tick遅延でカウントダウン開始
  system.runTimeout(() => {
    const intervalId = system.runInterval(() => {
      if (!playerTimers.has(player.name)) {
        system.clearRun(intervalId);
        return;
      }

      // 1tickごとに減らす(1秒 = 20tick)
      const newTime = playerTimers.get(player.name) - 1;
      playerTimers.set(player.name, newTime);

      if (newTime === -1) {
        // 0:00:00 表示の直後に終了
        player.runCommandAsync(
          `titleraw @a title {"rawtext":[{"text":"§6 終了!"}]}`
        );
        playerTimers.delete(player.name);
        system.clearRun(intervalId);
      } else {
        const timeString = formatTime(newTime);
        player.runCommandAsync(
          `titleraw @a actionbar {"rawtext":[{"text":" 残り時間:${timeString}"}]}`
        );
      }
    }, 20); // 1秒ごと
  }, 1); // ← 1tick 遅延(0.05秒)
}
#

でもどれだけスタートタイミングを調整してもスタートした瞬間に1秒(20ティック)減るからこれが正しいのか?

不具合があるなら、タイマー設定=スタートじゃなく、タイマー設定で時間表示させて、さらにスタートボタン追加でやるとか?

deep pagoda
#

減らすのと表示の順序を交換するというのはなしではない気がしますが…割と好みかな