-1

嘿伙计们对这个菜鸟问题感到抱歉,但我很难为我已经开始制作的 iphone 游戏初始化我自己创建的类。在我开始实际开发我的游戏之前,我进行了一次快速测试,看看我已经完成的内容是否可以工作,并且我正在测试的类不会初始化。这是我所拥有的:

    @implementation Game
    SceneController *sceneController;

    +(id)scene {...} // just the default scene method created by cocos2d

    -(id)init{
        if((self=[super init])){
            [[sceneController performSelector:@selector(alloc)]performSelector:@selector(init)];
            CGSize size = [[CCDirector sharedDirector] winSize];
            CCLabelTTF *label=[CCLabelTTF labelWithString:[NSString stringWithFormat:@"%i",[sceneController performSelector:@selector(xxx)]] fontName:@"Marker Felt" fontSize:64];
            [self addChild: label];
        }
        return self;
    }


    // IN ANOTHER CLASS
    @implementation SceneController
    int xxx; // not a real variable just used for the test

    -(id)init{
        if((self=[super init])){
            xxx=432;
        }
        return self;
    }

    -(int)xxx{
        return xxx;
    }

我的问题是,它应该只是说 0,而不是像它一样读取 432 的标签。任何人都可以帮助我。

4

2 回答 2

2
[[sceneController performSelector:@selector(alloc)] performSelector:@selector(init)];

哇。这就像从后备箱进入汽车一样。有趣的是,这仍然有效。或者也许它没有,这就是你得到错误的原因。

无论如何,要初始化一个类(任何 Objective-C 教程都会教你)你这样做:

sceneController = [[SceneController alloc] init];

您还应该在 init 方法中添加一个断点以测试它是否实际运行。

于 2012-08-01T22:42:50.270 回答
1

看起来你没有SceneController正确地构造你的对象。

在您init的 Game 方法中,您需要进行如下调用:

sceneController = [[SceneController alloc] init];

而不是这个:

[[sceneController performSelector:@selector(alloc)]performSelector:@selector(init)];

然后您的sceneController实例变量被正确初始化并且您的init方法将被调用。

于 2012-08-01T22:43:24.880 回答