无论如何,即使我暂停游戏,菜单也能正常工作吗?

问题描述

| 所以我在做一个菜单:
CCMenu *menu = [CCMenu menuWithItems:addThing1,addThing2,addThing3,nil];
[menu alignItemsVertically];
[self addChild:menu];
它工作正常,但我也想在发生这种情况时暂停游戏,所以我这样做:
[[CCDirector sharedDirector] pause];
因此,这也可行,但是问题是当我暂停游戏时,它也会暂停菜单。无论如何,这不会发生?在我看来,它也很直观地暂停菜单...但是无论如何:有没有办法使它不暂停菜单?还是我必须求助于其他方法...如果需要,我会想知道是否对此代码有任何相对较快的修复程序,使其能够正常工作...     

解决方法

        好吧...我从不使用[[CCDirector sharedDirector]暂停]。它会暂停所有Cocos2D,而这不是您想要的。我不清楚的是,是否需要一个可以接管屏幕的菜单,还是要在游戏顶部放置一个菜单,但仍然可以看到游戏。 添加全屏菜单: 创建一个新的CCLayer子类,然后根据需要命名。设置您喜欢的方式,然后使用:
// Push the PauseLayer screen (or whatever you have called your menu
// layer class)
// This will pause your game and hold it\'s state in memory.
[[CCDirector sharedDirector] pushScene:[PauseLayer node]];

// Pop the cached scene
// This will remove your menu layer and display your
// game layer where it was left off.
// Any custom timers will likely need to be
// reset/resumed inside of onEnter or onEnterTransitionDidFinish
[[CCDirector sharedDirector] popScene];
添加叠加类型菜单: 要获得一个菜单,您仍然可以在下面看到游戏,您将需要执行以下操作。
CCLabelBMFont *difficultyLabel = [CCLabelBMFont labelWithString:@\"Difficulty\" fntFile:@\"projectOneMenuItem1.fnt\"];
CCMenuItemLabel *difficulty = [CCMenuItemLabel itemWithLabel:difficultyLabel target:self selector:@selector(chooseDifficulty:)];
CCLabelBMFont *audioSourceLabel = [CCLabelBMFont labelWithString:@\"Switch to iPod Audio\" fntFile:@\"projectOneMenuItem1.fnt\"];
CCMenuItemLabel *audioSource = [CCMenuItemLabel itemWithLabel:audioSourceLabel target:self selector:@selector(switchAudioSource:)];
CCLabelBMFont *leaderboardsLabel = [CCLabelBMFont labelWithString:@\"Leaderboards\" fntFile:@\"projectOneMenuItem1.fnt\"];
CCMenuItemLabel *leaderboards = [CCMenuItemLabel itemWithLabel:leaderboardsLabel target:self selector:@selector(showLeaderboards:)];
CCLabelBMFont *achievementsLabel = [CCLabelBMFont labelWithString:@\"Achievements\" fntFile:@\"projectOneMenuItem1.fnt\"];
CCMenuItemLabel *achievements = [CCMenuItemLabel itemWithLabel:achievementsLabel target:self selector:@selector(showAchievements:)];
CCLabelBMFont *backLabel = [CCLabelBMFont labelWithString:@\"Back\" fntFile:@\"projectOneMenuItem1.fnt\"];
CCMenuItemLabel *back = [CCMenuItemLabel itemWithLabel:backLabel target:self selector:@selector(goBack:)];

CCMenu *menu = [CCMenu menuWithItems: difficulty,audioSource,leaderboards,achievements,back,nil];

menu.position = ccp(winSize.width/2,winSize.height*0.15);
[menu alignItemsVerticallyWithPadding:10];
[self addChild:menu];
然后,您将需要具有一个标志,您的游戏可以检查该标志以确定它是否应该执行任何操作。 例如,如果您的AI在方法update:(ccTime)dt中做某事,则可以这样做:
// Check to see if game actions should be running or not
if(!isGamePaused)
{
    // AI Code here
}
您可以将该标志提供给需要它的任何人,然后检查暂停标志。在上面的代码中,isGamePaused是一个bool变量,适用于整个类。 如果您需要暂停Box2D之类的物理模拟,那么这也适用。
if(!isGamePaused)
{
    _world->Step(dt,10,10);    

    for(b2Body *b = _world->GetBodyList(); b; b=b->GetNext()) 
    {    
        if (b->GetUserData() != NULL) 
        {
            if(!b->IsActive()) continue;
            CCSprite *sprite = (CCSprite *)b->GetUserData();
            sprite.position = ccp(b->GetPosition().x * PTM_RATIO,b->GetPosition().y * PTM_RATIO);
            sprite.rotation = -1 * CC_RADIANS_TO_DEGREES(b->GetAngle());
        }        
    }
}
希望有帮助。     ,        如果我开发您的应用程序,我会像这样 而不是暂停游戏,我将使用ur菜单创建自定义场景。 不用暂停游戏,我会用这个新场景替换上一个场景,而这个新场景我们已经在上一个场景中添加了菜单。 因此即使我们暂停游戏也可以使用。(暂停表示您使用ur菜单淡出了新场景)     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...