0

cocos2dを使ってiPhoneゲームを開発しています。

プレイヤーが選択した場合にメイン メニューからゲームプレイを再開できるようにするため、pushScene を使用してゲームプレイ シーンからメイン メニュー シーンに移行します。彼らが再開することを選択した場合は、popScene を使用します。

問題は、ゲームプレイ シーンがプッシュされたときにイベントが「不完全」であると、シーンがポップされたときに、それらのイベントが完了しないことです。さらに悪いことに、それらは自分ではクリアできないアーティファクトをシーンに残します。

例: 粒子の爆発効果 (粒子が「凍結」し、設計どおりに消散しない)、スプライトのフェードアウト効果 (スプライトは特定の透明度レベルで表示されたままになります)。

シーンがプッシュされたときとまったく同じように popScene がシーンを再開することを期待していたと思いますが、現在実行中のアクションを「放棄」しているようです。

どうすれば目標を達成できますか?

4

2 に答える 2

0

CCSceneを使用するのではなく、ゲーム プレイ レイヤーとメイン メニュー レイヤーの両方を children と同じに追加することをお勧めします。メニューを表示する必要がある場合は、レイヤーの可視性を変更し、ゲーム プレイ レイヤーのすべてのコンテンツを一時停止します。これらのメソッドを試して、ゲーム レイヤーのアクティビティを再帰的に一時停止/再開できます。pushScenepopScene

- (void)pauseSchedulerAndActionsRecursive:(CCNode *)node {
    [node pauseSchedulerAndActions];
    for (CCNode *child in [node children]) {
        [self pauseSchedulerAndActionsRecursive:child];
    }
}

- (void)resumeSchedulerAndActionsRecursive:(CCNode *)node {
    [node resumeSchedulerAndActions];
    for (CCNode *child in [node children]) {
        [self resumeSchedulerAndActionsRecursive:child];
    }
}

次のように呼び出します。

[self pauseSchedulerAndActionsRecursive:gamePlayLayer];
于 2012-04-25T06:18:45.900 に答える
0

Hailei のコードを使用しましたが、問題なく機能するカテゴリを作成しました。

CCNode+additions.h

#import "CCNode.h"

@interface CCNode (additions)
-(void)pauseSchedulerAndActionsRecursive;
-(void)resumeSchedulerAndActionsRecursive;
@end

CCNode+additions.m

#import "CCNode+additions.h"

@implementation CCNode (additions)
-(void)pauseSchedulerAndActionsRecursive {
    [self pauseSchedulerAndActions];
    for (CCNode *child in [self children]) {
        [child pauseSchedulerAndActionsRecursive];
    }
}
-(void)resumeSchedulerAndActionsRecursive {
    [self resumeSchedulerAndActions];
    for (CCNode *child in [self children]) {
        [child resumeSchedulerAndActionsRecursive];
    }
}
@end

そのため、一時停止するときは、ゲーム ノードに「一時停止メニュー ノード」を追加するに、ゲーム ノードで pauseSchedulerAndActionsRecursive を呼び出します (そうしないと、一時停止ノードも一時停止されて使用できなくなります)。

于 2013-04-30T09:11:12.997 に答える