【问题标题】:Passing Level parameter when transition to next Scene?过渡到下一个场景时传递级别参数?
【发布时间】:2014-07-29 11:32:15
【问题描述】:

我正在尝试找出在 Xcode 中使用 Spritebuilder 和 Cocos2D 在场景之间传递关卡参数的最佳方法。

我正在使用下面的标准代码在场景之间进行转换。

[[CCDirector sharedDirector] replaceScene:[CCBReader loadAsScene:@"Gameplay"]];

任何帮助将不胜感激。

【问题讨论】:

    标签: objective-c cocos2d-iphone spritebuilder


    【解决方案1】:

    假设Gameplay.ccb 有一个GameplayClass 指定为其自定义类,并且该类有一个名为currentLevel 的属性,您可以访问该实例并按如下方式指定级别:

    CCScene* theScene = [CCBReader loadAsScene:@"Gameplay"];
    GameplayClass* game = (GameplayClass*)theScene.children.firstObject;
    game.currentLevel = 3;
    
    [[CCDirector sharedDirector] replaceScene:theScene];
    

    请注意,在分配currentLevel 时,GameplayClass 将已经运行其initdidLoadFromCCB 方法,因为这发生在loadAsScene 期间。如果您需要进一步的初始化处理覆盖onEnter in GameplayClass:

    -(void) onEnter
    {
        [super onEnter]; // must call super
    
        switch (self.currentLevel)
        {
            // other switches omitted...
    
            case 3:
                // your level 3 code here
                break;
        }
    }
    

    【讨论】:

    • 谢谢老哥,我回家试试看:)
    【解决方案2】:

    在我的游戏(使用 Cocos2d 2.0 + CocosBuilder 制作)中,我在管理游戏元素的 GameObjectLayer 类中添加了一个类方法 loadWithLevelID:levelID

    @implementation GameObjectLayer {
        G1LevelID * _levelID;
    }
    // load a Luminetic Land game object layer
    + (instancetype)loadWithLevelID:(G1LevelID*)levelID {
        NSString * levelFileName = ... builds levelFileName from levelID;
        GameObjectLayer * gol = (GameObjectLayer*) [CCBReader nodeGraphFromFile:levelFileName];
        [gol setLevelID:levelID];
        return gol;
    }
    - (void)setLevelID:(G1LevelID*)levelID {
        _levelID = levelID;
    }
    

    所以现在我可以创建一个 GameObjectLayer 类型

    GameObjectLayer * gol = [GameObjectLayer loadWithLevelID:levelID];
    

    一般来说,向映射 ccbi 文件的类添加“加载”方法有以下好处:

    1. 只有类知道其相关 ccbi 文件的名称。
    2. 用于创建给定类的 ccbi 文件在整个项目中仅被引用一次。
    3. 设置对象(例如 G1GameObjectLayer 类型)的所有逻辑都在对象本身内部。

    我认为您可以对 CCScene 子类采用类似的方法。

    【讨论】:

    • 感谢这位朋友。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-16
    • 2011-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-06
    相关资源
    最近更新 更多