Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/117.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios cocos2D替换场景未初始化类_Ios_Ios4_Cocos2d Iphone_Scene - Fatal编程技术网

Ios cocos2D替换场景未初始化类

Ios cocos2D替换场景未初始化类,ios,ios4,cocos2d-iphone,scene,Ios,Ios4,Cocos2d Iphone,Scene,我有两个场景(主菜单)和另一个(HelloWorld场景)。我可以使用replace scene切换场景,但是在第二次尝试加载它之后,它不会调用init方法 以下是我迄今为止的努力 //In my mainMenu.m -(void)starting{ [[CCDirector sharedDirector] replaceScene:[HelloWorldLayer scene]]; } //and in my HelloWorldScene.m file -(void)goMain

我有两个场景(主菜单)和另一个(HelloWorld场景)。我可以使用replace scene切换场景,但是在第二次尝试加载它之后,它不会调用init方法

以下是我迄今为止的努力

//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方法。

init方法通常设计为仅在首次创建对象时调用。当切换回场景时,您可以编写自己的-(void)switchBack方法并调用它以适当地更新场景(很可能这与init方法的外观非常不同,因为您不想重新添加所有内容)

我有这个问题,最后我只是在切换场景时创建了一个新场景(并发布了当前场景),因为这对我来说并不昂贵。这很好,因为我可以在场景切换后释放所有未使用的纹理,而且我不必担心更新内容。

不要这样做:

[[CCDirector sharedDirector] replaceScene:[mainMenu node]];
您正在尝试重新初始化已存在的对象(主菜单)。如果要使用同一个节点(我可能会添加一个非常不寻常的节点),则必须这样做:

[[CCDirector sharedDirector] replaceScene:mainMenu];
但是,由于您希望调用init,您希望创建主菜单的新实例,因此可以通过将节点消息发送到类本身(假设主菜单是类的名称)来实现与[HelloWorldLayer场景]中相同的方法:


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

希望它能帮助某些人。

我已经导入了main menu.h,但是使用该语句会给我一个错误(意外的接口名称“main menu”):预期的表达式。我猜即使您不想初始化,也需要使用该节点。
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