-1

やあみんなnoobの質問で申し訳ありませんが、私が作り始めた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;
    }

私の問題は、ラベルが432と表示されているのではなく、0と表示されていることです。誰か助けてくれませんか。

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方法では、次のように電話をかける必要があります。

sceneController = [[SceneController alloc] init];

これの代わりに:

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

次に、sceneControllerインスタンス変数が適切に初期化され、initメソッドが呼び出されます。

于 2012-08-01T22:43:24.880 に答える