0

現在、記録時間のベースとしてNSTimerを使用してアプリケーションを作成しています。ただし、プレイヤーが現在の質問にヒントを使用したり、没収したりした場合は、進行中のNSTimerの時間を増やすというペナルティがあります。

私が持っている質問は、進行中のNSTimerにさらに価値を追加することは可能ですか?例:タイマーは0:23:41.2にあり、ユーザーはヒント/没収を押します。10分と言う追加機能が欲しいです。プレイヤーがヒント/没収を押したときにタイマーが0:33:41.2になるような関数を作成するにはどうすればよいですか?

NSTimerに関連する記事でグーグルとSOを見つけてみたところ、役に立つかもしれないこのSOスレッドに出くわしました。NSTimerの評価方法

スレッドに示されている経過時間の代わりに、以下のような変数と交換できると思います。(ただし、以下に示す例が実行できない場合は、教えてください。このゲームを成功させたいと思っています)

-(BOOL)hintButtonPressed

-(void) timerFireMethod:(NSTimer *) theTimer {

        if (hintButtonPressed == true) {
            // do something to increase value
            [theTimer invalidate];
        } 
}
4

3 に答える 3

2

NSTimer時間を追跡するための良いツールではありません。これは、定期的なアクション(特に、タイミング要件がそれほど厳しくないアクション)をスケジュールするための優れたツールです。

時間を追跡する方法は、最新の「タイマー開始」時間、「累積時間」(最新の開始前の時間)、および「isRunning」ブール値の3つのivarを使用します。いつでも、合計時間は次のとおりです。

accumulated + (now - start) * (isRunning ? 1 : 0)

これにより、を変更することで時間を簡単に加算または減算できますaccumulated。また、データを更新する必要NSTimerはありません(これはめったに良いアプローチではありません)。

于 2012-10-18T16:31:14.890 に答える
2

カウントダウンにNSTimerを使用しない場合でも、fireDateに時間を追加する簡単な方法があります。

[_timer setFireDate:[[_timer fireDate] dateByAddingTimeInterval:600]];

これにより、_timerに10分(600秒)が追加されます。

そして、あなたの例の最良の解決策は、ボタンのアクションメソッドを作成し、そのアクションメソッドでユーザーがすでに時間ボーナスを取得しているかどうかをチェックすることです。

もちろん、fireメソッドでfireDateを変更することはできますが、私のコードラインでは再度起動しません。

于 2012-10-18T17:09:41.467 に答える
1

私が覚えていることに、NSTimerに時間を追加したり、増分したりすることはできません。新しいものを作成し、古いものを解放/無効化する必要があります。

ちなみに、シンプルなタイマーなら、それでも簡単にできます

[NSObject cancelPreviousPerformRequestsWithTarget: self]
[self performSelector:<#(SEL)#> withObject:<#(id)#> afterDelay: incrementedTime];

ただし、Selectorを実行すると、NSTimerのような正確な時間情報を取得できず、増分時間をブラインドすることができます。したがって、すべてはあなたのニーズに依存します。

于 2012-10-18T16:31:16.680 に答える