Как получить доступ к изменяющейся переменной из другого класса?(например, количество уровней) - PullRequest
0 голосов
/ 15 декабря 2011

У меня есть две сцены. Сцена A - игровая сцена, в которой изменяется переменная level типа int. В классе B я хочу получить переменную.

Теперь у меня есть следующее:

--------------------------------- LevelDone.m ----------- ----------------------

HelloWorldLayer *object = [[HelloWorldLayer alloc]init];

        int pointsForZeroStars = [[requiredPoints objectAtIndex:0] integerValue];
        int pointsForOneStar = [[requiredPoints objectAtIndex:1] integerValue];
        int pointsForTwoStars = [[requiredPoints objectAtIndex:2] integerValue];
        int pointsForThreeStars = [[requiredPoints objectAtIndex:3] integerValue];
        NSLog(@"HEALTH = %d",object.health);
        CCSprite *levelDoneWindow;         
        if ( object.health < pointsForZeroStars){
            NSLog(@"should be 0 stars");
            levelDoneWindow = [CCSprite spriteWithFile:@"leveldonescreen0stars.png"];
        }

NSLog возвращает начальное значение health, равное 100, когда на самом деле оно меньше 100.

В игровом классе я звоню pushscene, чтобы вызвать сцену LevelDone:

----------------------------- HelloWorldLayer.m (Сцена игры) ----------- --------------------------

else{

    [[CCDirector sharedDirector] pushScene:[LevelDone node]];
    [self generateLevelFromPlist:level];


}

Метод -generateFromPlist сбрасывает здоровье до 100. Но он, безусловно, вызывается после метода NSLog в моем классе LevelDone.m, который, тем не менее, печатает, что health равно 100.

Как правильно получить значение этой переменной?

Ответы [ 2 ]

0 голосов
/ 16 декабря 2011

Использование синглтона для управления глобальными значениями.

http://getsetgames.com/2009/08/30/the-objective-c-singleton/

По сути, вы можете создавать свойства в этом синглтон-классе, и он будет «сохраняться» на протяжении всей игры, независимо от того, в какой сцене вы находитесь и т. Д.

0 голосов
/ 16 декабря 2011

Вы уверены, что свойство health HelloWorldLayer действительно корректно обновляется?Если это так, я бы заподозрил (и, опять же, просто предположил, что ошибка, по-видимому, отсутствует в самом предоставленном коде), что переменная, которую вы изменяете в HelloWorldLayer, отличается от свойства, к которому вы обращаетесьс object.health - возможно, здесь возникает проблема с областью видимости (т. е. селектор влияет на локальную переменную health, но не на саму переменную экземпляра).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...