0

所以,我对如何用 cocos2d 实现以下行为有点困惑:

想象一下,用户在“关卡选择”场景中......他们选择了他们想要开始的适当关卡,然后点击开始......这将启动:

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

--- 但是.. 我应该如何向 Game 提供有关用户选择的级别的信息?我正在查看 cocos 代码,但没有看到任何允许为类声明带有参数的自定义 init 方法。所以我只是好奇解决这个问题的常规方法是什么?

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

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

然后它将调用游戏的 initWithLevel: 而不是默认的 init 方法(它显示为 +node 调用)......有什么方法可以做到这一点?

4

2 回答 2

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]
于 2012-08-19T14:30:41.030 回答
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 ;
于 2012-08-19T11:03:12.117 回答