2013-02-06 61 views
0

我有3个类,即GameScene,HomeScene和RecordsScene,我试图从GameScene传递一个整数值到RecordScene。我的问题是,一旦游戏完成,它会回家,然后你必须点击记录来查看记录。基本上,三个班的顺序是这样的:在cocos2d的3个类之间传递int

GameScene - > HomeScene - > RecordScene

我一直试图做的是从GameScene整数值传递给HomeScene然后从HomeScene,我将它传递给RecordScene但是当我到达那里时,整数的值仍为0。这里是我当前的代码:

//GameScene 
-(void)goHome:(ccTime)dt 
{ 
HomeScene *home = [HomeScene node]; 
//myInt is an integer I declared on the HomeScene class, the value changes depending on the stage 
home.layer.myInt = 1; 
[[CCDirector sharedDirector]replaceScene:home];} 

//HomeScene 
-(void)viewRecord:(id)sender 
{ 
//View record 
RecordScene *record = [RecordScene node]; 
//lastStage is the integer from RecordScene I'm passing the value of myInt into 
record.layer.lastStage = myInt; 
[[CCDirector sharedDirector]replaceScene:record];} 

我实现类,像这样:

@implementation HomeScene 
@synthesize layer; 

-(id)init 
{ 
if((self =[super init])) 
{ 
    self.layer = [HomeSceneLayer node]; 
    [self addChild:layer]; 
} 
return self; 
} 
@end 

@implementation HomeSceneLayer 
@synthesize myInt; 
//methods 
@end 

然后我的头看起来像这样:

@interface HomeScene : CCLayer 
{ 
int myInt;} 
@property(nonatomic)int myInt; 
@end 

@interface HomeScene : CCScene 
{ 
HomeSceneLayer *layer; 
} 
@property (nonatomic, retain)HomeSceneLayer *layer; 
@end 

为什么重新回到0,我怎么从GameScene到RecordScene传递整数值?

+0

如何声明'HomeScene'上的'layer'属性和'layer'上的'myInt'?你用ARC吗?如果你没有确定在获取int值之前没有发布实例吗? – gerrytan

+0

基本上,我做的是实现HomeScene和合成图层来添加图层。然后我实现了HomeSceneLayer并在那里合成了myInt。我会更新我的帖子以包含该帖子。 – user1597438

回答

1

@synthesize myInt;创建一个iVar _myInt

RecordScene *record = [RecordScene node]; 
//lastStage is the integer from RecordScene I'm passing the value of myInt into 
record.layer.lastStage = myInt; 

要设置record.layer.lastStage于敏(HomeScene的伊娃)。尝试record.layer.lastStage = self.layer.myInt;

从苹果公司的编码准则在https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/CodingGuidelines/Articles/NamingIvarsAndTypes.html

确保实例变量的名称扼要地描述它所保存的属性。通常,您不应该直接访问实例变量,而应该使用访问器方法(您可以直接在init和dealloc方法中访问实例变量)。为了帮助用下划线(_)信号这一点,前缀实例变量的名称,例如:

的Xcode现在(我因为不知道什么时候)也自动合成属性,命名为伊瓦尔@property [...] foo_foo

+0

感谢您的建议。我试了一下,但是记录仍然返回0 – user1597438

+0

你正在设置'home.layer.myInt = 1;',然后尝试在HomeScene中访问myInt。试试'record.layer.lastStage = self.layer.myInt;'。我将编辑我的答案 – Sebastian

+0

我设法解决问题,只需删除RecordScene并添加一个方法,将从HomeScene中删除所有的孩子,并添加应该在RecordScene中的所有内容。有点像,在HomeScene的顶层。虽然这有点乏味,但我不得不为其他课程进行修改。我还没有完成,所以我仍然会试试这个。非常感谢! :) – user1597438