Создаем новый проект |
Создадим проект, в недавнем времени, я обновил кокос до версии - cocos2d-iphone v2.1-beta2 и темплейтах там уже сделано, буквально, за вас - все. Но начнем все с чистого листа.
Объявление компонента меню |
Для начала, попробуем создать компонент меню, при помощи простого текста. Для этого подойдет CCMenuItemFont.
Объявление наследника компонента меню (Текстовую кнопку(CCMenuItemFont)) |
Для обычной текстовой кнопки подойдет и CCMenuItemFont, но если вам нужно что бы текст на кнопки был какого-то определенного или вашего (если вы используете не стандартные шрифты) шрифта - для этого сначала прийдется создать компонент CCLableTTF c указанным шрифтом, а потом у ItemFont использовать конструктор itemWithLabel:.
Еще один пример, как создать ToggleButton (Переключатель).
Для этого, создаем две любые кнопки и вкладываем их в компонент CCMenuItemToggle.
Для добавления кнопок в меню, используем конструктор menuWithItems:. Кнопки, так же можно добавлять и уже после инициализации самого меню, через метод addChild:, как и у простого слоя.
Что бы все заработало, надо обязательно реализовать "заглушки" для селекторов назначенных на кнопки, иначе, проект даже не запустится.
Теперь можно запустить проект и посмотреть на результат.
Не скучаем и напишем код для перехода на новую сцену. Но для начала, создадим новый класс наследника от CCLayer с реализацией новой сцены. Что бы проверить и собственно увидеть переходы между сценами, добавим на новую сцену какую нибудь картинку.
И вот собственно код самого перехода ;) Только не забудьте добавить импорт хэдэр-файла содержащего сцену, на которую мы собственно и хотим перейти.
Переход между сценами я сделал через replaceScene:, но на самом деле есть и другие методы переходов. О них сейчас и пойдет речь.
Рассмотрим несколько из этих методов, которыми чаще пользуются.
1. replaceScene: - один из часто используемых методов для прехода. Суть его состоит в полной замене одной сцены, другой. При этом, все переменные, данные и структуры, существующие в заменяемой сцене - уничтожаются. Все было бы отлично, но тут есть одно НО! Пока полностью не загрузится новая сцена - старая не будет удалена. Т.е. в короткий промежуток времени, в памяти девайса, будут висеть две полностью загруженные сцены, что не есть good. Так как устройство может не выдержать нагрузки или просто не хватит памяти. По этому во всех источниках, рекомендуется использовать промежуточные сцены с минимальным контентом (Экраны загрузки или какие нибудь аналоги).
2. pushScene: - в кокосе, существует стек сцен. Так вот этот метод позволяет добавить сцену в этот стек. Если сцена не вмещает какого либо "тяжелого" контента или не требует обновления того же контента, то такую сцену проще хранить в стеке и при необходимости вызывать. Фактически, это полная противоположность первой функции.
3. popScene: - еще одна функция работы со стеком сцен. Эта функция позволяет вызвать/вытянуть/поднять последнюю добавленную сцену в стек.
4. runWithScene: - тут я думаю особых комментариев не требуется). Запускаем выбранную сцену.
Есть так же и другие методы для работы со сценами, но я описал наиболее часто используемые.
Для переходов между сценами, существует целая структура/группа методов позволяющая прикрутить анимацию к переходам, одну из них мы уже использовали (CCTransitionProgressRadialCCW)
Я сделал не большую выписку этих самых анимаций( в какой-то момент времени мне этот список был необходим, но ни на одном ресурсе я так и не смог его найти, по этому пришлось пробовать все потихоньку):
Еще один пример, как создать ToggleButton (Переключатель).
Для этого, создаем две любые кнопки и вкладываем их в компонент CCMenuItemToggle.
Создание меню с парой кнопок |
Что бы все заработало, надо обязательно реализовать "заглушки" для селекторов назначенных на кнопки, иначе, проект даже не запустится.
Теперь можно запустить проект и посмотреть на результат.
Реализация текстовой кнопки и переключателя |
Не скучаем и напишем код для перехода на новую сцену. Но для начала, создадим новый класс наследника от CCLayer с реализацией новой сцены. Что бы проверить и собственно увидеть переходы между сценами, добавим на новую сцену какую нибудь картинку.
Новый класс с тестовой картинкой |
Обработка нажатия на кнопку, с последующим переходом на новую сцену |
После нажатия на кнопку |
Рассмотрим несколько из этих методов, которыми чаще пользуются.
1. replaceScene: - один из часто используемых методов для прехода. Суть его состоит в полной замене одной сцены, другой. При этом, все переменные, данные и структуры, существующие в заменяемой сцене - уничтожаются. Все было бы отлично, но тут есть одно НО! Пока полностью не загрузится новая сцена - старая не будет удалена. Т.е. в короткий промежуток времени, в памяти девайса, будут висеть две полностью загруженные сцены, что не есть good. Так как устройство может не выдержать нагрузки или просто не хватит памяти. По этому во всех источниках, рекомендуется использовать промежуточные сцены с минимальным контентом (Экраны загрузки или какие нибудь аналоги).
2. pushScene: - в кокосе, существует стек сцен. Так вот этот метод позволяет добавить сцену в этот стек. Если сцена не вмещает какого либо "тяжелого" контента или не требует обновления того же контента, то такую сцену проще хранить в стеке и при необходимости вызывать. Фактически, это полная противоположность первой функции.
3. popScene: - еще одна функция работы со стеком сцен. Эта функция позволяет вызвать/вытянуть/поднять последнюю добавленную сцену в стек.
4. runWithScene: - тут я думаю особых комментариев не требуется). Запускаем выбранную сцену.
Есть так же и другие методы для работы со сценами, но я описал наиболее часто используемые.
Для переходов между сценами, существует целая структура/группа методов позволяющая прикрутить анимацию к переходам, одну из них мы уже использовали (CCTransitionProgressRadialCCW)
Я сделал не большую выписку этих самых анимаций( в какой-то момент времени мне этот список был необходим, но ни на одном ресурсе я так и не смог его найти, по этому пришлось пробовать все потихоньку):
CCTransitionCrossFade - плавный переход между сценамиCCTransitionFade - плавный переход между сценами с затемнениемCCTransitionFadeBL - переход квадратами с правого верхнего угла, в левый нижнийCCTransitionFadeDown - жалюзи, внизCCTransitionFadeTR - переход квадратами с левого нижнего угла, в правый верхнийCCTransitionFadeUp - жалюзи, вверхCCTransitionFlipAngular - переход с поворотом на 180 градусовCCTransitionFlipX - переход с поворотом на 180 градусов по xCCTransitionFlipY - переход с поворотом на 180 градусов по yCCTransitionJumpZoom - переход с уменьшением/увеличением сцены и эффектом прыжкаCCTransitionMoveInB - перекрытие новой сценной снизуCCTransitionSlideInL - смещение сцены новой слеваCCTransitionSlideInR - смещение сцены новой справаCCTransitionSlideInT - смещение сцены новой сверхуCCTransitionSlideInB - смещение сцены новой снизуCCTransitionShrinkGrow - переход очень похожий на CCTransitionJumpZoom, но без эффектапрыжкаCCTransitionPageTurn - поворот страницыCCTransitionRadialCCW - эффект часовой стрелкиCCTransitionRotoZoom - эффект закручивания по спиралиCCTransitionScene - мгновенная замена сценыCCTransitionSceneOriented - переход с возможностью установки ориентации экранаCCTransitionSplitCols - переход через двигающиеся колонкиCCTransitionSplitRows - анологоичный эффекту CCTransitionSplitCols, только через рядкиCCTransitionTurnOffTiles - переход через рандомно заменяющиеся квадратики
На этом все пока ;) Всем удачи в экспериментах и алхимии) И с наступающим Новым Годом!
Комментариев нет :
Отправить комментарий