ios - (Cocos2D) 检测显示的是哪个CCScene?

标签 ios cocos2d-iphone scene cclayer

是否可以检测到当前在场景中显示的是哪个 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/

相关文章:

ios - MVVM 中的分析

ios - 在不使用 .plist 文件的情况下使用 CCSpriteBatchNode

iphone - iPhone游戏咖啡馆音效

ios - [SpriteBuilder]使用时应用程序图标变白 "Assert catalog"

Javafx 阶段为空

java - 如何在 JavaFX 中切换场景

ios - 如何使用 IOS 8 XCode 6 beta 从 Popover 中的按钮关闭 UIPopover

ios - 如何使用 Google Drive API v3 获取我的云端硬盘中的文件?

ios - 点击发送或取消按钮后如何关闭邮件 View Controller

javascript - 如何检查场景中的节点是否包含匹配的geometryid?