0

コードが「replaceScene」に到達するたびに、パフォーマンスの問題に直面しています。プレイ シーンでのみ発生します。ゲームが終わったらスコアを表示し、メイン メニューに戻るために CCDirector が replaceScene を実行します。

約 20 秒待ってから、最終的にメイン メニューが表示されます。しかし、どういうわけかこれは正しくありません。プレイヤーは、ゲームが突然ハングしたように感じるでしょう。次に、プリローダーのようなアニメーションを配置しようとしましたが、同じことが起こり、プリローダーの画像がしばらくアニメーション化された後、突然停止しました。同じ問題が原因で、replaceScene によってトリガーされたと思いますが、それでもメイン メニュー シーンが表示されます。不要になったすべてのオブジェクトのリリースをスピードアップする方法について、いくつかのヒントを提供するように注意してください。

ここで専門家からの解決策を得ることを望んでいます。ありがとう。

これが私のコードです:

............
//button at the score pop up sprite

CCMenuItem *btContinue = [CCMenuItemImage itemFromNormalImage:BTCONTINUE 
                                                selectedImage:BTCONTINUE_ON 
                                                       target:self 
                                                     selector:@selector(goLoader)];
btContinue.anchorPoint = ccp(0,0);
btContinue.position = ccp(340, 40);

CCMenu *menu = [CCMenu menuWithItems:btContinue, nil];
menu.position = CGPointZero;

[self addChild:menu z:ZPOPUP_CONTENT];

//prepare the loader, but set visible to NO first
CCSprite *loaderBg = [CCSprite spriteWithFile:LOADER_FINISH];
loaderBg.anchorPoint = ccp(0,0);
loaderBg.position = ccp(0,0);
loaderBg.visible = NO;
[self addChild:loaderBg z:ZLOADER_BG tag:TAG_LOADER_BG];
NSLog(@"prepare loader finish");

//animate loader
CCSprite *loaderPic = [[CCSprite alloc] initWithSpriteFrame:[[CCSpriteFrameCache sharedSpriteFrameCache] 
                                                          spriteFrameByName:LOADER]];    
loaderPic.anchorPoint = ccp(0.5,0.5);
loaderPic.position = ccp(200,35);
loaderPic.visible = NO;
[self addChild:loaderPic z:ZLOADER_PIC tag:TAG_LOADER_PIC];

[loaderPic runAction:[CCRepeatForever actionWithAction:[CCRotateBy actionWithDuration:0.05f angle:10.0f]]];
}

-(void)goLoader {
NSLog(@"goMainMenuScene");
CCSprite *tmpBg = (CCSprite *) [self getChildByTag:TAG_LOADER_BG];
if (tmpBg != nil)
    tmpBg.visible = YES;

CCSprite *tmpPic = (CCSprite *) [self getChildByTag:TAG_LOADER_PIC];
if (tmpPic != nil)
    tmpPic.visible = YES;

double time = 2.0;
id delay = [CCDelayTime actionWithDuration: time];
id proceed = [CCCallFunc actionWithTarget:self selector:@selector(goMainMenuScene)];
id seq = [CCSequence actions: delay, proceed, nil];
[self runAction:seq];
}

-(void)goMainMenuScene {
[[GameManager sharedGameManager] runSceneWithID:SCENE_MAIN_MENU];
}
4

1 に答える 1

0

問題はおそらく新しいシーンであり、新しいシーンとその子ノードのinitメソッドで何が起こっても問題はありません。リソースファイルの読み込みにはかなり時間がかかる場合があります。これをonEnterに延期すると、より良い結果が得られる可能性があります。しかし、20秒、それはたくさんです。あなたがしていることを確認してください。これには時間がかかります。大量のリソースをロードしているか、非常に非効率的な方法でロードしているに違いありません。JPGファイルを使用する場合はPNGに変換すると、JPGファイルの読み込みが非常に遅くなることが知られています。

于 2012-11-12T23:15:11.153 に答える