проблема сохранения сцены cocos2d

В моем приложении есть сцена, в которой всего две метки и пункт меню. Когда я загружаю эту сцену с помощью метода replaceScene, она остается на 3-4 секунды, а затем исчезает или освобождается. Я хочу сохранить его до тех пор, пока не будет нажата кнопка отмены. Как мне это сделать? код:

@implementation MyLayer

+ (id)myScene {

    CCScene *aScene = [CCScene node];
    MYLayer *myLayer = [MyLayer node];
    [aScene addChild:myLayer];

    return aScene;  
}
- (id) init {

    if (self = [super init]) {
           //labels and menu here    
    }
    return self;
}

И я вызываю его из другой сцены так:

[[CCDirector sharedDirector] replaceScene: [MyLayer myScene]];

person WaJiyaz    schedule 17.02.2011    source источник
comment
В коде, который вы разместили, нет ничего плохого, поэтому он должен быть где-то еще...   -  person Lukman    schedule 24.03.2011
comment
@Lukman: Спасибо за рассмотрение вопроса, но я давно его решил. Я использую pushScene вместо replace, и он отлично работает :)   -  person WaJiyaz    schedule 24.03.2011


Ответы (2)


Может проблема в том, что это твоя первая сцена. Затем вы должны использовать runWithScene метод CCDirector.

person Andrew    schedule 17.02.2011
comment
мы не можем запустить другую сцену, пока одна уже запущена, ее нужно заменить. Эта сцена завершает работу всего приложения без ошибок. Я даже сделал переход от этой сцены к UIViewController, но он все еще завершается. - person WaJiyaz; 17.02.2011
comment
Попробуйте поставить точку останова в методе Dealloc MyLayer. Если он срабатывает - посмотрите на стек вызовов, чтобы увидеть, кто ему звонил - person Andrew; 18.02.2011
comment
то, что я понял до сих пор, - это разница в том, как вы инициализируете сцену и слои. Один метод использует node, а другой — init. Для замены сцены нам нужен последний и уничтожить все в предыдущих слоях. Но это дает еще одну проблему, что экран заполнен причудливым розовым слоем. многие люди сталкиваются с такой же ситуацией. Кроме того, я думаю, что все спрайты находятся на своем месте под этим розовым слоем, потому что я мог нажимать кнопки, которые я разместил на этом слое. Посмотрим, смогу ли я избавиться от этого розового слоя. Я также попробую ваше предложение, но я не думаю, что Dealloc всегда вызывается, когда нам это нужно :) - person WaJiyaz; 18.02.2011

Вы пытались заменить эту сцену «пустой» функцией инициализации, чтобы увидеть, освобождает ли она себя? Это может быть из-за количества текстур, которые вы помещаете в память.

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

person Coke2Code    schedule 18.02.2011