2012-02-03 17 views
0

我有兩個場景(MAINMENU)和其他(HelloWorldScene)。我可以使用替換場景來切換場景,但在第二次嘗試加載它時,它不會調用init方法。的Cocos2D更換現場沒有初始化類

以下是我迄今的努力。

//In my mainMenu.m 

-(void)starting{ 

[[CCDirector sharedDirector] replaceScene:[HelloWorldLayer scene]]; 

} 

//and in my HelloWorldScene.m file 

-(void)goMain{ 

[[CCDirector sharedDirector] replaceScene:[mainMenu node]]; 

} 

我的問題是,如何在替換場景時調用該類的 - (id)init方法。

回答

0

init方法通常被設計首先創建對象時只被調用。當您切換回場景時,您可以編寫自己的 - (void)switchBack方法並調用它來適當地更新場景(這很可能與您的init方法看起來非常不同,因爲您不想重新添加所有內容)。

我有這個問題,最後我在場景之間切換時創建了一個新場景(並且發佈了當前場景),因爲它對我來說並不昂貴。這很好,因爲我可以在場景切換後釋放所有未使用的紋理,而且我不必擔心更新事物。

1

不要這樣做:

[[CCDirector sharedDirector] replaceScene:[mainMenu node]]; 

您正在嘗試重新初始化一個已經存在的對象(MAINMENU)。如果您想使用相同的節點(相當不尋常我可以補充),那麼你就必須做這種方式:

[[CCDirector sharedDirector] replaceScene:mainMenu]; 

但既然你希望初始化您要創建一個新的實例調用你的主菜單中,您通過發送節點消息類本身實現同樣的方式在[HelloWorldLayer現場](假設的MainMenu是類的名稱):

[[CCDirector sharedDirector] replaceScene:[MainMenu node]]; 
+0

我已經導入了mainMenu.h,但是使用該語句給了我一個錯誤(Unexpected Interface Name'mainMenu':expected expression。我想即使你不想初始化也需要使用Node。 – 2012-02-06 05:14:59

0

init方法被調用,但是一些變量沒有重置,我不得不在方法中手動重置它們。

通過爲HellowWorldLayer創建句柄,我們可以調用該類中定義的任何方法。

HelloWorldLayer *hw = [HelloWorldLayer node]; // This is how we create the handle. 
[hw Testing]; // This is how we call any method inside. 

[[CCDirector sharedDirector]replaceScene:[CCTransitionCrossFade transitionWithDuration:0.5 scene:hw]]; // Use that handle for changing the scene 

希望它能幫助別人。