2013-02-06 15 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