在 cocos2d 中恢复游戏循环

Posted

技术标签:

【中文标题】在 cocos2d 中恢复游戏循环【英文标题】:Resume game loop in cocos2d 【发布时间】:2012-08-17 18:53:09 【问题描述】:

我有一个动画游戏。在游戏场景中,我使用下面的方法来暂停我的游戏(效果很好,因为当用户点击 ios 设备的任意一点时,游戏就会暂停):

-(void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event

    UITouch *touch=[touches anyObject];
    CGPoint locationOfTouch=[self convertTouchToNodeSpace: touch];

    CGRect rectOfScreen=CGRectMake(0, 0, screenSize.width, screenSize.height);

if (CGRectContainsPoint(rectOfScreen, locationOfTouch)) 

    [[CCDirector sharedDirector] replaceScene:[PauseScene scene]];
    [self unschedule:@selector(spawnEnemies:)];
    [self unschedule:@selector(checkCollisionOfEnemyWithBullet:)];
    [self unschedule:@selector(update:)];
    [self unschedule:@selector(isJoystickActivated:)];
    [self unschedule:@selector(checkHasGameEnded:)];

    [[CCDirector sharedDirector] pause];

为了实现恢复动作,我创建了 PauseLayer:CCLayer,在这里我实现了以下方法来恢复游戏:

-(void) continueGame:(id)sender

[[CCDirector sharedDirector] resume];
[[CCDirector sharedDirector] replaceScene:[GameSceneLayer scene]];
//[self resumeSchedulerAndActions];

这是代码,我如何调用上面的方法:

 CCMenuItemFont* continue_game=[CCMenuItemFont itemWithString:@"continue game" target:self selector:@selector(continueGame:)];

但是,当我选择继续游戏时,游戏从空白点开始:每个游戏状态,每个游戏角色都是新的。如何从用户暂停的初始点恢复我的游戏?谢谢!

【问题讨论】:

【参考方案1】:

你可以使用这两个cocos2D函数来暂停和恢复:

[self pauseSchedulerAndActions]; //pause
[self resumeSchedulerAndActions];//resume

还维护一个布尔变量,并在需要时检查。

   bool mISGamePaused;

【讨论】:

我对使用布尔变量 mIsGamePaused 感到困惑。如果我只能使用这些功能,为什么我实际上需要这个变量? @TarasMurzenkov,在我的游戏中,我为不同的障碍使用了许多单独的类。因此,使用这个 bool 变量,我们可以避免在游戏暂停时执行某些代码... 你能发布一些代码示例吗? PS 我在 -(void)continueGame:(id)sender 中使用了方法 [self resumeSchedulerAndActions],但是我的游戏没有从暂停状态恢复。 我使用了相同的调用,在你的 continueGame 函数中删除了 replaceScene api。也不要在暂停时取消调度选择器......只需检查游戏是否在那些 shedular 中暂停..如果游戏暂停则不允许执行功能..

以上是关于在 cocos2d 中恢复游戏循环的主要内容,如果未能解决你的问题,请参考以下文章

cocos2d iPhone中的循环背景

更新 cocos2d 中的循环和按钮

塔防cocos2d

Cocos2d v2.x (ios) - 如何做循环滚动?

如何在 cocos2d 环境之外实现 cocos2d 游戏的虚拟摇杆?

如何在 Cocos2d 中暂停和恢复