如何使场景转换将值传递给目标类的初始值设定项?

时间:2012-08-19 05:14:54

标签: objective-c cocos2d-iphone

所以,我对如何使用cocos2d实现以下行为感到困惑:

想象一下,用户正处于“水准选择”场景......他们选择了他们想要开始的适当级别,然后点击开始..这启动:

[[CCDirector sharedDirector] replaceScene:[CCTransitionFade transitionWithDuration:1.0 scene:[Game scene] withColor:ccBLACK]];

---但..我应该如何向游戏提供有关用户选择的级别的信息?我正在查看cocos代码,并且我没有看到任何允许一个人使用类的参数声明自定义init方法的事情。所以我只是很好奇解决这个问题的传统方法是什么?

要非常清楚,我想要类似的东西:

[[CCDirector sharedDirector] replaceScene:[CCTransitionFade transitionWithDuration:1.0 scene:[Game scene] performSelector:@selector(initWithLevel) withObject:userLevel withColor:ccBLACK]];

然后调用Game的initWithLevel:而不是默认的init方法(它出现+节点调用)......有没有办法做到这一点?

2 个答案:

答案 0 :(得分:1)

将@property添加到Game类中,该类获取用户选择的级别。我假设它是一个简单的整数。然后使用场景类方法初始化Game类,设置属性,并在过渡中使用它。

将多行填充到一行中确实很有帮助。这样,这些可能性开始在你的脸上跳跃:

// initialize your game class
Game* scene = [Game scene];
scene.userSelectedLevel = 10;

// or alternatively:
[scene setUserSelectedLevel:10];

// then transition
CCTransitionScene* transi = [CCTransitionFade transitionWithDuration:1.0 
                                                               scene:scene
                                                           withColor:ccBLACK]
[[CCDirector sharedDirector] replaceScene:transi];

您还可以更改Game类的场景方法以将此参数作为输入,但坦率地说,只使用属性更容易:

+(id) sceneWithLevelNumber:(int)levelNumber
{
    // assign level number to Game instance here
}

// call it like this:
[Game sceneWithLevelNumber:10]

答案 1 :(得分:0)

理想情况下,我们使用一个主类的静态/单个实例... 现在创建MyGame类来维护游戏特定数据,如 - 得分,等级.. 您可以在屏幕的任何位置访问此课程..主菜单,级别选择,游戏屏幕..

在MyGame.h文件中

@interface MyGame : NSObject
{
    int mLevel;
}
@property(nonatomic,assign) int         level;
+ (MyGame *)sharedGameObject;
@end

在MyGame.m文件中

static MyGame *gGame = nil;

@implementation MyGame
  @synthesize level = mLevel;


+(MyGame*)sharedGameObject
{
    if(!gGame)
    {
        gGame = [[MyGame alloc] init];
    }
    return gGame;
}

@end

//在关卡选择屏幕

[MyGame sharedGameObject].level = 5;//selected level

//在游戏画面中,

int level = [MyGame sharedGameObject].level ;