我有两个场景。场景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
如何正确检索此变量的值?
答案 0 :(得分:0)
您确定HelloWorldLayer的health
属性实际上是否正确更新?如果是这样,我怀疑(并且,再次,只是猜测,因为错误似乎不在提供的代码本身中),您在HelloWorldLayer中更改的变量与您正在访问的属性不同使用object.health
- 这里可能存在范围问题(即,选择器正在影响本地health
变量,但不影响实例变量本身。)
答案 1 :(得分:0)
使用单身人士来管理全球价值。
http://getsetgames.com/2009/08/30/the-objective-c-singleton/
基本上,您可以在该单例类中创建属性,无论您在哪个场景等,它都将在整个游戏中“持久”。