2011-12-15 56 views
0

我有两个场景。场景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

较小的在游戏中I类,以调用LevelDone现场拨打pushscene

----------------------------- HelloWorldLayer.m(游戏场景)------------ -------------------------

else{ 

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


} 

-generateFromPlist方法健康重置为100,但它的NSLog方法后,肯定是叫在我的LevelDone.m类中,仍然打印出health为100.

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

+0

什么场景你在哪里设置/更新的价值`健康?`错误不在这里显示的代码中,但很可能在HelloWorldLayer类中。 – 2011-12-15 19:38:51

+0

听起来很棒/不好!不应该`pushScene`方法暂停所有选择器和方法?我有一个运行在1秒间隔的选择器。但它只会减少健康。实际上,下面的方法`[self generateLevelFromPlist:level];`将它重新设置为100。 – 2011-12-15 19:48:33

回答

0

您确定HelloWorldLayer的health属性实际上是否正确更新?如果是这样,我会怀疑(并且再一次猜测,因为这个错误并没有出现在提供的代码本身中)你在HelloWorldLayer中改变的变量与你正在访问的属性不一样与object.health - 也许范围问题在这里(即选择器正在影响本地health变量,但不是实例变量本身)。

+0

如果我尝试设置级别变量,它也不起作用。也许这只是一个可怕的循环,重新被调用,做了可怕的事情,我现在真的很绝望! – 2011-12-15 20:42:55