воскресенье, 6 января 2013 г.

О структуре базового проекта

Структура шаблона проекта cocos2d. Часть 1

В прошлом уроке мы создали наш первый проект и запустили его.
Теперь давайте поговорим о том, какова структура проекта, основанного на cocos2d.


Вот список файлов нашего проекта, доступный в левой панели XCode:
Все, что нас интересует, лежит в группе "HelloWorld" - заметьте, "папки" в XCode называются группами, т.к. физически почти все файлы лежат в одной и той же папке, а вот логически они организуются в группы. Эта организация видна только в XCode.

Начнем с конца :) В группе Supporting Files находятся main.m - "стартовая точка" программы, которую вам наврядли придется модифицировать - и Prefix.pch - файл, содержащий список хэдеров для прекомпиляции. По сути, это необходимо для ускорения компиляции программы.
В этот файл обычно добавляют хэдеры фреймворков, код которых редко меняется в течение разработки программы, поэтому мы можем открыть Prefix.pch и после строчки
#import <Foundation/Foundation.h>
добавить:
#import "cocos2d.h" 

Идем далее.
В группе libs находится сама библиотека cocos2d и ряд вспомогательных библиотек. Исходный код этих библиотек вам доступен и вы всегда можете обратиться к нему. Правда, будьте аккуратны и ничего в нем не меняйте - или меняйте, но только если уверены и обладаете достаточным опытом.
В группе "Resources" хранятся файлы-ресурсы - то есть изображения, музыка и т.д.
В нашем случае, Default.png - экран, отображаемый при запуске приложения, Icon-* - файлы иконок, Info.plist - файл конфигурации (о нем в других постах) и т.д.
Наконец, все остальные файлы в папке HelloWorld (AppDelegate, RootViewController, HelloWorldLayer, GameConfig) - классы самого приложения.

AppDelegate - это класс, который присутствует в каждом iOS-приложении. Он отвечает за реакцию на различные глобальные события, которые операционная система посылает нашему приложению - например, о входящем звонке, о малом количестве памяти, о том, что пользователь собирается свернуть приложение и т.д.
Самое первое сообщение, которое посылается нашему приложению - applicationDidFinishLaunching - и именно здесь инициализируется библиотека cocos2d и вообще все, необходимое для работы программы. Больше о событиях, посылаемых приложению, можно узнать из документации Apple.

Большинство кода в этом классе вам никогда не придется менять.
Но есть несколько строк, которые вы, возможно, захотите поменять:
#if GAME_AUTOROTATION == kGameAutorotationUIViewController
[director setDeviceOrientation:kCCDeviceOrientationPortrait];
#else
[director setDeviceOrientation:kCCDeviceOrientationLandscapeLeft];
#endif
[director setAnimationInterval:1.0/60];
[director setDisplayFPS:YES];

Сначала мы вызываем метод setDeviceOrientation для установки ориентации устройства.
Вы можете менять ориентацию на нужную вам, передавая одно из следующих значений:
  • kCCDeviceOrientationPortrait - вертикальная ориентация, кнопка "Home" внизу
  • kCCDeviceOrientationPortraitUpsideDown - вертикальная ориентация, кнопка "Home" вверху
  • kCCDeviceOrientationLandscapeLeft - горизонтальная ориентаци, кнопка "Home" справа
  • kCCDeviceOrientationLandscapeRight - горизонтальная ориентаци, кнопка "Home" слева

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

Далее, метод setAnimationInterval устанавливает, как часто будет обновляться экран - то есть, фактически, здесь мы задаем, какой ФПС (fps = frames per second, кадры в секунду) мы хотим.
По умолчанию, это значение равно 60, то есть экран будет перерисовываться каждую 0.0167 секунды.
В сложных играх, вычисления могут занимать больше времени, поэтому есть шанс, что реальное значение ФПС будет меньше - но это ваша задача, как разработчика, чтобы частота показа кадров была высокой. Иногда, лучше выставить здесь 1.0/30, то есть 30 кадров в секунду, чтобы добиться плавной анимации.
Важно отметить, что на iOS-устройствах невозможно выставить более 60 кадров в секунду - на более высоких значениях, в лучшем случае, вы не увидите изменений, а в худшем случае будут заметны торможения.

Наконец, метод setDisplayFPS задает, отображать ли текущую частоту показов кадра на экране.
Разумеется, имеет смысл выставлять YES при отладке приложения и NO при выпуске "в мир".
Опытные разработчики советуют ставить 60 кадров в секунду для экшн-игр, тогда как 30 кадров в секунду будет достаточно для казуальных игр типа паззла или пасьянса.

Для изменения частоты отображения FPS на экране устройства нужно поменять константу 
CC_DIRECTOR_FPS_INTERVAL, которая находится в файле ccConfig.h в группе cocos2d - по умолчанию, значение фпс изменяется 10 раз в секунду (значение CC_DIRECTOR_FPS_INTERVAL = 0.1) - чем меньше значение, тем чаще обновляется информация о фпс.

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


Иллюстрации и примеры кода взяты из книги Learn cocos2d Game Development with iOS 5.
Посетите также блог автора книги ("Learn Cocos2d", Steffen Itterheim)

Комментариев нет:

Отправить комментарий