1

C#でタイマーを作成しようとしています。これを行うには、フレームをカウントしてから、フレーム数を60で割った値に等しい変数(秒)を作成します。また、秒を60で割った値に等しい別の変数(分)を使用して分をカウントします。

問題 分が1増えると、秒がカウントされ続け、これを修正する方法がわかりません。秒が60に達するたびに1を分に追加したいのですが、分をゼロに設定せずにゼロに戻します。

これが私が試したことです:

    int frames = 0;
    int seconds = 0;
    int minutes = 0;

これは更新中です:

    protected override void Update(GameTime gameTime)
    {

        minutes = seconds / 60;

        seconds = frames / 60;

        frames += 1;
4

3 に答える 3

5

必要に応じて、フレームを数え、そこから秒と分を導き出すことをお勧めしますしたがって、各Update呼び出しですべての変数を本当に更新する必要がある場合は、次のようになります。

frames++;
seconds = (frames / 60) % 60;
minutes = frames / (60 * 60);

または、より明確にするために、いくつかの定数を定義します。

const int FramesPerSecond = 60; const int SecondsPerMinute = 60; const int FramesPerMinute = FramesPerSecond * SecondsPerMinute;

..。

frames++;
seconds = (frames / FramesPerSecond) % SecondsPerMinute;
minutes = frames / FramesPerMinute;

(1時間後に分を0にリセットする必要がある場合は、これをさらに延長する必要があります。)

しかし、あなたが何をしようとしているのかは明確ではありません-それを達成するためのより良い方法があるかもしれません。間違いなくフレームをカウントしようとしている場合、これは問題ありません...しかし、経過時間を計算しようとしている場合は、タイマーの正確な起動に依存するのではなく、基準時間を覚えてから、現在の時刻からそれを差し引く必要があります1秒に1回。

于 2012-11-24T08:06:04.853 に答える
2

重要:0から60(分と秒)を数える場合、61秒を数えます。だからあなたの条件で0から59に行きます。

たとえば、手には5本の指がありますが、0から数えると6本の指があります。(私たちは突然変異体ですか?)

:)

于 2012-11-24T08:07:16.303 に答える
1

したがって、System.Threading.TimerまたはSystem.Threading.DispatcherTimerが必要ない場合は、標準のTimeSpanを使用して、ミリ秒を追加することができます。または、プロパティを自動的にインクリメントする独自のTimeSpanのようなクラスを作成します。

于 2012-11-24T08:08:21.063 に答える