2013-09-16 3 views
0

Я построил игру с линкором, в которой игрок и компьютер поворачиваются к огневой бомбе в сетке 10X10.Игры Cocos2d ReplaceScene между двумя сценами

Я использую cocos2d 2.0 для iphone.

У меня есть две сцены, PlayerScene и AIScene.

В Playerscene.m, я использую

[[CCDirector sharedDirector] replaceScene:[CCTransitionSlideInR transitionWithDuration:1.0 scene:[AIScene sceneWithPositions:otherpos andHits:otherhits andOtherPositions: rects andOtherHits: prev]]]; 

, чтобы перейти к AIScene после того, как игрок выбрал позицию.

это хорошо работает.

Однако в AIScene, я использую

[[CCDirector sharedDirector] replaceScene:[CCTransitionFade transitionWithDuration:1.0 scene:[CombatScene sceneWithParameters:OtherPositions andHits:OtherHits andOtherPositions: Positions andOtherHits: Hits]]]; 

вернуться и это не работает. Игра осталась в AIScene.

Тем не менее, я могу прикоснуться к экрану, и игра замигает мне PlayerScene с бомбой, которую я только что разместил, и вернусь обратно к AIScene.

Что не так?

ПОСЛЕДНИЕ ИНФОРМАЦИИ: Я добавил кнопку в AIscene для запуска события replaceScene, и он работает. Однако, если я добавлю его в конец метода onEnter(), он не работает.

+0

Вы уверены, что вам нужна замена сцены здесь? в этом случае это кажется довольно странным. – Morion

ответ

1

Возьмите этот код из метода OnEnter, создать таймер или что-то подобное, например, поместить это в метод OnEnter:

[self performSelector:@selector(replaceSceneAfterDelay:)withObject:nil afterDelay:3.0]; 

и до сих пор в AIScene, создать метод:

-(void)replaceSceneAfterDelay 
{ 
    [[CCDirector sharedDirector] replaceScene:[CCTransitionFade transitionWithDuration:1.0 scene:[CombatScene sceneWithParameters:OtherPositions andHits:OtherHits andOtherPositions: Positions andOtherHits: Hits]]]; 
} 

Обратите внимание, что 3 секунды. слишком много, попробуйте свое собственное значение.

Следующий текст был издан из книги «Изучение IPhone 5 и IPad 2 Cocos2d Game Development». Написано Steffen Itterheim. Ссылка: http://www.amazon.com/Learn-cocos2d-Game-Development-iOS/dp/1430238135

«Сцены и память:

Имейте в виду, что при замене одной сцены на другую, новая сцена загружается в память перед памятью старой сцены освобождается

2

Вы не можете заменитьScene внутри метода onEnter (или метода init). Другими словами, вы не можете вызвать replaceScene из сцены, которая в настоящее время находится в процессе замены другой сцены.

Вы можете запланировать селектор один раз, а затем вызвать replaceScene из запланированного селектора. Таким образом, замена происходит только после замены сцены.

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