1

私はこれに関するいくつかの投稿(例えばこれ)を見ましたが、それでもわかりません。

CCDirectorのpauseメソッドを呼び出すと、アニメーションの間隔が1/4に設定され、値isPaused_がYESに設定されます(以下のコードを参照)。CCDirector.mクラスでは、isPaused_変数はpauseメソッドとresumeメソッド以外ではあまり使用されていないようです。

したがって、stopAnimationメソッドも呼び出すことにしましたが、一部の投稿ではこれについて言及されていません。

   [[CCDirector sharedDirector] stopAnimation]

メインシーンに送信される加速度計データと入力データを停止することはないようです。ゲームの開発者は、ユーザーがiPhoneを振ったり、再開ボタンをタップしたりして再開できるようにしたい場合があるので、それは私にはある程度意味があります。これがこの選択の背後にある理由ですか?

また、アニメーション間隔が1/4に設定されているのはなぜですか。また、この値でも移動しないのはなぜですか(加速度計入力を使用して移動するプレーヤーエンティティの一部)。

どうもありがとう!

-(void) pause
{
    if( isPaused_ )
        return;

    oldAnimationInterval_ = animationInterval_;

    // when paused, don't consume CPU
    [self setAnimationInterval:1/4.0];

    [self willChangeValueForKey:@"isPaused"];
    isPaused_ = YES;
    [self didChangeValueForKey:@"isPaused"];
}
4

1 に答える 1

2

CCDirector を一時停止すると、バッテリーと CPU サイクルの両方を節約するために、フレームレートが 4 fps に低下します。後者は、UIKit ビューを使用する場合に必要です。場合によっては、UIKit アニメーションをスムーズにアニメーション化するためにディレクターを一時停止する必要があります。

ディレクターを一時停止すると、すべてのノードの更新が停止します。具体的には、CCScheduler は、スケジュールされたセレクターまたは更新メソッドを起動しません。また、ディレクタが一時停止すると、タッチも一時停止される CCTouchDispatcher を介してリレーされるため、タッチがノードに渡されるのを防ぎます。

しかし、お気づきのように、加速度計は一時停止していません。これは、cocos2d が UIAccelerometer のラッパーを提供しないため、ディレクターの一時停止ステータスを無視して、これらの通知を iOS から直接取得するためです。その後、didAccelerate メソッドまたはそこから直接呼び出された別のメソッド内でノードの位置を変更すると、ディレクターが一時停止されているにもかかわらず、そのノードの位置が変更されます。

これは、ディレクターの一時停止が「ゲームの一時停止」機能にあまり適していない理由の 1 つにすぎません。もう 1 つの問題は、一時停止すると単純に cocos2d 機能で構築された一時停止メニューも一時停止されなくなり、目的に反することです。

次に、startAnimation と stopAnimation は、cocos2d が画面を完全に更新するのを防ぐ極端な手段です。これは通常、cocos2d ビューがビュー階層から一時的に削除されるか非表示になるか、一部の UIKit ビューがフルスクリーンになる状況でのみ使用されます。その意味で、stopAnimation はサスペンド機能のようなものです。

于 2012-07-26T14:06:05.593 に答える