3

私はこの質問が以前に尋ねられ、答えられたことがあることを知っていますが、答えのどれも私がやろうとしていることに合わないようです。アニメーションを一時停止できる必要がありますが、それでも一時停止メニューを表示してユーザーに入力を求めることができます。これは可能ですか?もしそうなら、どうすればそれを実行できますか?

4

9 に答える 9

7

2つの方法がpauseありresume、この目的のためにCCDirector

[[CCDirector sharedDirector] pause];

[[CCDirector sharedDirector] resume];

ドキュメントから:

実行中のシーンは描画されますが、スケジュールされたすべてのタイマーは一時停止されます一時停止中は、CPU消費を減らすために描画レートは4FPSになります

于 2013-03-27T10:24:34.887 に答える
4

cocos2dシーンスタックの「一時停止シーン」をプッシュすることをお勧めします。

CCScene * pauseScene = ...;
[[CCDirector sharedDirector] pushScene:pauseScene];

これにより、現在のシーン(レベルシーンと想定)が自動的に一時停止され、ユーザーが操作できるように「一時停止シーン」が実行されます。

上記の手順を実行すると、cocos2dのシーンスタックに2つのシーン(レベルシーン[フリーズ] +ポーズシーン[実行中])が作成されることを覚えておくことが非常に重要です。

したがって、「一時停止シーン」に入ったら、レベルを再開する場合は、スタックから一時停止シーンをポップする必要があります。

[[CCDirector sharedDirector] popScene];

これにより、「一時停止シーン」が自動的に削除され、スタック内の前のシーン(レベルシーン)が再開されます。

いつか一時停止シーンを常に「ポップ」する必要があることを忘れないでください。「レベルシーン」がまだcocos2dのシーンスタックにあることを忘れないことが重要です!

例:「シーンの一時停止」にレベル選択メニューをロードして現在のレベルを永続的に残すボタンがある場合は、次のように実装する必要があります。

CCScene * levelSelector = ... 
[[CCDirector sharedDirector] popScene]; // to remove the "pause scene" from the stack
[[CCDirector sharedDirector] replaceScene:levelSelector]; // replace the "level scene" with the "levelSelector scene"
于 2013-04-12T14:37:28.923 に答える
1

私はすべての提案を試しましたが、私の場合はどれもうまくいきませんでした。それで、これが私にとって本当にうまくいったことでした。これは一時停止することです。

[self pauseSchedulerAndActions];
for (CCNode *child in [self children]) {
    [child pauseSchedulerAndActions];

}

そしてこれを再開します:

        [selfReference resumeSchedulerAndActions];
        for (CCNode *child in [selfReference children]) {
            [child resumeSchedulerAndActions];

        }
于 2013-03-27T14:50:08.993 に答える
1

Cocos 2Dバージョン2では、アクションマネージャーはもはやシングルトンではありません。しかし、むしろコードはCCDirectorと融合されています。

したがって、これは特定のシーンのすべてのアクションを一時停止し、それらも再開する方法です。

-(void)pauseGamePlayScene{
    for(CCSprite *sprite in [self children]) {
        [[[CCDirector sharedDirector] actionManager]pauseTarget:sprite];   
    }
}

-(void)resumeGamePlayScene{
    for(CCSprite *sprite in [self children]) {
        [[[CCDirector sharedDirector] actionManager]resumeTarget:sprite];
    }
}

Cocos 2dVer2アクションマネージャーのドキュメント

お役に立てれば。

于 2013-09-12T05:11:53.733 に答える
0

アニメーションだけをやめますか?

[ [ CCDirector sharedDirector ] stopAnimation ];

[ [ CCDirector sharedDirector ] startAnimation ];

すべてを停止したい場合は、他の場所で行ったように一時停止し(メニューが所定の位置に移動した後)、ユーザーが特定のものに触れたら一時停止を解除します。

于 2013-03-26T21:41:18.777 に答える
0

私はcocos2Dを初めて使用し、(scheduleupdateではなく)個別のゲームループを使用しており、さらにいくつかのスケジューラーとともにスケジュールを解除しています。ゲームレイヤーの上に新しいレイヤー(つまり、Pauselayer)を配置すると同時に、ゲームプレイが自動的に一時停止します。かなり複雑に見えますが、私のために働きました。

于 2013-03-27T13:14:00.443 に答える
0

私が使う:

@interface CCNode (PauseAdded)

@end


@implementation CCNode (PauseAdded)


-( void ) traversePause
{
    CCNode* a = [children_ lastObject];

    CCARRAY_FOREACH( children_, a )
    {
        [scheduler_ pauseTarget:a];
        [actionManager_ pauseTarget:a];
        [a traversePause];
    }

    [scheduler_ pauseTarget:self];
    [actionManager_ pauseTarget:self];
}


-( void ) traverseResume
{
    CCNode* a = [children_ lastObject];

    CCARRAY_FOREACH( children_, a )
    {
        [a traverseResume];
        [scheduler_ resumeTarget:a];
        [actionManager_ resumeTarget:a];
    }

    [scheduler_ resumeTarget:self];
    [actionManager_ resumeTarget:self];
}

@end

そうすれば、ゲームレイヤーが一時停止レイヤーから分離されていると仮定して、次のようなことができます。

[scene.game_layer traversePause];

そして一時停止を解除するには:

[scene.game_layer traverseResume];
于 2013-07-18T17:17:09.287 に答える
0

このPauseButtonクラスhttps://github.com/iabtyagi/custom-pause-cocos2dを試してください。あなたが探していることを正確に行います。

于 2013-07-22T17:56:37.410 に答える
0

CCPhysicsNode * _physics;

_physics.paused = true; //ゲームは一時停止しますが、アクションは一時停止しません。

_physics.paused = false; //一時停止ゲーム中のようにボタンが押されている間、スプライトの回転と落下を再開します。

于 2014-12-26T10:18:15.877 に答える