如何从另一个类访问更改变量? (例如等级计数)

时间:2011-12-15 19:13:55

标签: objective-c cocos2d-iphone global-variables

我有两个场景。场景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(GAME SCENE)----------- --------------------------

else{

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


}

-generateFromPlist方法将运行状况重置为100.但是在我的NSLog类中LevelDone.m方法之后肯定会调用它,但仍会打印出health为100

如何正确检索此变量的值?

2 个答案:

答案 0 :(得分:0)

您确定HelloWorldLayer的health属性实际上是否正确更新?如果是这样,我怀疑(并且,再次,只是猜测,因为错误似乎不在提供的代码本身中),您在HelloWorldLayer中更改的变量与您正在访问的属性不同使用object.health - 这里可能存在范围问题(即,选择器正在影响本地health变量,但不影响实例变量本身。)

答案 1 :(得分:0)

使用单身人士来管理全球价值。

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

基本上,您可以在该单例类中创建属性,无论您在哪个场景等,它都将在整个游戏中“持久”。