cocos2D заменяет сцену, не инициализируя класс - PullRequest
0 голосов
/ 03 февраля 2012

У меня есть две сцены (mainMenu) и другая (HelloWorldScene).Я могу переключать сцены, используя замену сцены, но после попытки загрузить его во второй раз, он не вызывает метод 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 для этого класса при замене сцены.

Ответы [ 3 ]

1 голос
/ 05 февраля 2012

Не делай этого:

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

Вы пытаетесь повторно инициализировать уже существующий объект (mainMenu). Если вы хотите использовать один и тот же узел (я бы добавил, довольно необычно), вам придется сделать это следующим образом:

[[CCDirector sharedDirector] replaceScene:mainMenu];

Но так как вы ожидаете вызова init, вы хотите создать новый экземпляр вашего главного меню, чего вы добьетесь таким же образом, как в [HelloWorldLayer scene], отправив сообщение узла самому классу (предполагая, что MainMenu Название класса):

[[CCDirector sharedDirector] replaceScene:[MainMenu node]];
0 голосов
/ 06 февраля 2012

Метод 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

Надеюсь, это кому-нибудь поможет.

0 голосов
/ 03 февраля 2012

Метод init обычно предназначен для вызова только при первом создании объекта.Когда вы переключаетесь обратно на сцену, вы можете написать свой собственный метод - (void) switchBack и вызвать его, чтобы соответствующим образом обновить сцену (возможно, это будет сильно отличаться от вашего метода init, так как вы не захотите добавлять все заново).).

У меня была эта проблема, в конце концов я просто создал новую сцену (и выпустил текущую) при переключении между сценами, так как это было не дорого для меня.Это было здорово, так как я мог выпустить все неиспользуемые текстуры после переключения сцены, и мне не пришлось беспокоиться об обновлении.

...