gpt4 book ai didi

iphone - 即使我暂停游戏,菜单也能正常工作吗?

转载 作者:行者123 更新时间:2023-12-03 21:06:40 24 4
gpt4 key购买 nike

所以我正在制作菜单:

CCMenu *menu = [CCMenu menuWithItems:addThing1, addThing2, addThing3, nil];
[menu alignItemsVertically];
[self addChild:menu];

它工作正常,但我也想在发生这种情况时暂停游戏,所以我这样做:

[[CCDirector sharedDirector] pause];

所以,这也有效,但问题是当我暂停游戏时,它也会暂停菜单。有办法不让这种情况发生吗?在我看来,暂停菜单也是违反直觉的……但无论如何:有没有办法让它不暂停菜单?或者我是否必须诉诸其他方法...如果必须的话我会的,但想知道是否有任何相对快速的修复此代码,使其工作...

最佳答案

嗯...我从不使用[[CCDirector共享导演]暂停]。它会暂停所有 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());
}
}
}

希望有帮助。

关于iphone - 即使我暂停游戏,菜单也能正常工作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6476199/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com