2013-08-28 3 views
0

У меня есть 2 объекта MyGameScreen, которые расширяют cocos2d :: CCLayer. Я собираю ccTouchesMove на первом экране, чтобы создать движущийся эффект точно так же, как перемещение между страницами экрана приложения iOS.Перемещение между «страницами» (CCLayer) в cocos2dx

Мой класс следующим образом:

class MyGameScreen: public cocos2d::CCLayer { 
    cocos2d::CCLayer* m_pNextScreen; 
} 

bool MyGameScreen::init() { 
    m_pNextScreen = MyOtherScreen::create(); 
} 

void MyGameScreen::ccTouchesMoved(CCSet *touches, CCEvent *event){ 
    // it crashes here... on the setPosition... m_pNextScreen is valid pointer though I am not sure that MyOtherScreen::create() is all I need to do... 
    m_pNextScreen->setPosition(CCPointMake((fMoveTo - (2*fScreenHalfWidth)), 0.0f)); 
} 

EDIT: добавление ясный вопрос

Он разбился при попытке SetPosition на m_pNextScreen ...

Я понятия не имею, почему он разбился, как m_pNextScreen - действительный указатель и правильно инициализирован. Может ли кто-нибудь объяснить, почему?

EDIT: добавление прогресса отчет

Я перестроенный всю систему и сделать class CContainerLayer : public cocos2d::CCLayer, который содержит как MyGameScreen и MyOtherScreen бок о бок. Однако это выглядело неэффективным подходом, так как, когда он растет, мне может потребоваться более 2 страниц, прокручиваемых бок о бок, я бы предпочел загрузить следующую страницу только тогда, когда это необходимо, а не весь CContainerLayer, который содержит все на предстоящие страницы, будет ли пользователь прокручиваться туда или нет ... У вас есть какая-то лучшая идея или пример с открытым исходным кодом github, который делает это?

Благодарим вас за ввод!

+0

что код в методе создания? Создает ли объект авторекламы, который вы не сохраняете? – jonynz

+0

это обычный метод CCLayer 'init()', я ничего не добавил ... это нормально, если он нажат с помощью CCTransitionScene ... Мне интересно, если это потому, что я не называю 'this-> addChild (m_pNextScreen) ', но следующий экран не должен быть дочерним элементом этого экрана ... – Zennichimaro

+0

Вы не задавали вопрос. Что вы хотите узнать? – LearnCocos2D

ответ

0

Для сцены Transitions вы можете сделать это:

недействительные MyGameScreen :: ccTouchesMoved (CCSet * прикосновений, CCEvent * событие)

{

CCScene * MyOtherScene = CCTransitionFadeUp :: создать (0.2f, MyOtherScreen :: scene());

CCDirector :: sharedDirector() -> replaceScene (MyOtherScene);

}

1

Использование подкачка позволяет scrollview.download файлы из следующей ссылки и места в вашем cocos2d/extenision/GUI/после того, что вы должны установить свойство Scrollview в enablepaging правды с размером просмотра пейджинга.

https://github.com/shauket/paging-scrollview

Смежные вопросы