代码之家  ›  专栏  ›  技术社区  ›  Susitha

如何在cocos2d场景之间传递参数

  •  0
  • Susitha  · 技术社区  · 11 年前

    我正在使用

    [[CCDirector sharedDirector] replaceScene:[CCTransitionCrossFade transitionWithDuration:0.5f scene:[CCBReader sceneWithNodeGraphFromFile:@"SongLoadingScene.ccbi"] ]];
    

    用于逐场景过渡。如何将参数传递给场景。

    4 回复  |  直到 11 年前
        1
  •  2
  •   lucianomarisi    11 年前

    CCBReader返回一个CCScene,其中包含您作为唯一子级传递的任何内容,因此您可以在CustomScene上创建一个构造函数,如下所示:

    @interface CustomScene ()
    
    @property (nonatomic, strong) id customParameter;
    
    @end
    
    @implementation CustomScene
    
    + (CCScene *)sceneWithCustomParameter:(id)customParameter
    {
        CCScene *customSceneParent = [CCBReader loadAsScene:NSStringFromClass([CustomScene class])];
        CustomScene *customScene = [customSceneParent.children firstObject];
        customScene.customParameter = customParameter;
        return customSceneParent;
    }
    
    @end
    

    这应适用于任何自定义CCNode(例如CCSprite)

        2
  •  1
  •   Saturn    11 年前

    CCBReader sceneWithNodeGraphFromFile 只是一个类方法,它返回 CCB阅读器 .

    因此,如果要向其传递整数,请首先修改 场景与节点图来自文件 接收它,比如

    +(CCScene*)sceneWithNodeGraphFromFile:(NSString*)file andInteger:(int)integer;
    

    然后修改 CCB阅读器 的构造函数也接收它。如果当前它看起来像

    -(id)initWithFile:(NSString*)file;
    

    你会有

    -(id)initWithFile:(NSString*)file andInteger:(int)integer;
    

    最后,您修改 场景与节点图来自文件 将整数传递给这个新构造函数。

        3
  •  1
  •   Abhineet Prasad    11 年前

    我不认为可以将参数传递给场景。然而,您可以尝试以下任一方法来解决您的问题。

    1. 使用另一个类singleton,并将参数值存储在singleton的变量中。您可以在主场景中读取该变量。

    2. 将该值保存在NSUserDefaults中,并在场景中读取。

        4
  •  1
  •   AKM    10 年前

    秘密在于:

    [CCBReader loadAsScene:@"YourCustomCCBFile"]
    

    它创建一个CCScene,并将自定义文件添加为子文件。 如果要访问自定义对象,可以通过以下方式进行:

    CCScene *scene = [CCBReader loadAsScene:@"YourCustomCCBFile"];
    CustomClass *customObject = [[scene children] firstObject];
    customObject.property = @"hi";
    
    [[CCDirector sharedDirector] replaceScene:scene];
    

    请记住,如果以这种方式设置某个属性,则该属性在

    - (void)didLoadFromCCB
    

    改用:

    - (void)onEnter