是否可以检测到当前在场景中显示的是哪个 CCScene?我的游戏中有 2 个 CCScene,如果其中一个正在显示,我希望执行某个操作。
还有一个快速相关的问题,如果我想检查 CCMenu 是否为 不是 目前显示我会做类似的事情
if (!menu) {
//Menu is not showing currently
}
说到Cocos2D,我有点菜鸟,所以请原谅我:)
谢谢!
最佳答案
您可以使用 CCDirector 来判断正在运行的场景。
[[CCDirector sharedDirector] runningScene];
至于菜单是否显示。您必须与菜单的父级确认。如果您的 CCLayer 所在的父级,那么您可以通过
// assume menu is set up to have tag kMenuTag
CCMenu * menu = [self getChildByTag:kMenuTag];
如果菜单是其他节点的子节点,您可以通过类似的方法获取父节点并获取对菜单的引用。
如果
menu == nil
,它没有显示。更新
在 cocos2d 中,不鼓励您保留对所有 Sprite 的引用,而是应该为每个节点提供一个唯一的标签并使用它来引用它。为了实现您的第一个目标,您可以在您的 2 个各自的 CCLayer 类中为您的场景添加一个标签。
您可以在名为 Tags.h 的文件中的枚举中设置您的唯一标签,然后将其导入需要访问您的标签的任何类
示例标签.h
enum {
kScene1Tag = 0,
kScene2Tag = 1,
kMenuTag = 2};
然后在你的图层类
+(id) scene
{
// 'scene' is an autorelease object.
CCScene *scene = [CCScene node];
scene.tag = kScene1Tag;
// 'layer' is an autorelease object.
HelloWorld *layer = [HelloWorld node];
// add layer as a child to scene
[scene addChild: layer];
// return the scene
return scene;
}
现在,当您抓取当前场景时,您可以检查标签
int currentSceneTag = [[CCDirector sharedDirector] runningScene].tag;
if (currentSceneTag == kScene1Tag) {
} else if (currentSceneTag == kScene2Tag) {
}
tag
属性来自 CCNode
这是 CCLayer
的基类, CCScene
, CCSprite
, CCMenu
...
关于ios - (Cocos2D) 检测显示的是哪个CCScene?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8978196/