ПРОГРАММИРОВАНИЕ ПОД IPHONE, IPAD OBJECTIVE-C часть 3

26. Cocos2D

Cocos2D HelloWorld

Что вам необходимо для начала

В этой статье я расскажу о требованиях и обязательных действиях который Вам нужно проделать, чтобы начать использовать cocos2ds. Регистрация как IOS разработчик и создания необходимых профилей подготовки которое отлично документированное Apple.

 

ВНИМАНИЕ: Идея быть на переднем плане развития iOS SDK может быть очень заманчивой. Время от времени, бета-версии SDK IOS были доступны. Я рекомендую не использовать IOS SDK бета-версии, если у вас есть очень веские причины для этого! Бета-версии могут содержать ошибки, они могут быть несовместимы с текущей версией cocos2d, и они находятся под NDA. Это означает, что трудно найти решения, если возникает любой вопрос, связанный с бета-версие, так как никто не имеет права обсуждать бета-версии SDK на разных форумах. Кроме того, необходимо установить в  IOS устройство бета-версию, но вы потом не сможете вернуться к предыдущей версии на IOS устройстве. Установленные приложения на вашем устройстве, могут быть несовместимы с новой бета-версии IOS, и они обычно не обновляются, пока новая версия IOS SDK официально не выпущена. Если нет большой необходимости в обновлений, моя Вам рекомендация, не обновляйтесь.

 

Скачать и установить cocos2d

Следующим шагом будет скачивание cocos2d. Вы можете скачать его с http://www.cocos2d-iphone.org/download. Поскольку много новичков продолжают иметь проблемы со сцинарием установки шаблонов, я также предлагаю установки для cocos2d и cocos3d, который запускает для вас скрипт установки шаблонов. Вы можете загрузить программу установки с Cocos2d Central: Installer for Cocos2D & Cocos3D.

 

Я рекомендую загрузки и разархивировать стабильную версию cocos2d. Нестабильная версия не значит, что он не стабильная все время, но это все же бета-версия. Это будет прекрасно работать в целом, но она может иметь некоторые нюансы, непроверенные возможности и несовместимости со сторонними инструментами. Прежде чем рассмотреть вопрос о нестабильной версии, пожалуйста, просмотрите примечания к выпуску, чтобы посмотреть содержит ли она что-либо особенно и полезное для вас. Если нет, то просто используйте стабильную версию.

 

После загрузки и распаковки cocos2d, у Вас будет каталог с именем cocos2d-iphone-1.0.1 и т.п., в зависимости от точного номера версии cocos2d которую вы скачали.

 

Устанавливаем cocos2d Xcode Project Templates

Примечание: Если вы использовали cocos2d/cocos3d установку, вы можете пропустить этот раздел. Шаблоны Xcode проекта уже установлены установщиком.

 

Откройте приложение терминал, которое вы найдете в папке утилит из папки приложения на вашем компьютере. Или просто введите Terminal.app в Spotlight, чтобы найти его. Шаблоны cocos2d  добавляются в Xcode с помощью скрипта, который вы должны будете запускать из командной строки в программе терминала.

 

Во-первых, перейдите в каталог, где cocos2d установлен. Например, если ваша cocos2d версия установлена ​​в папке документы в подкаталоге cocos2d-iphone-1.0.0, то введите следующую команду:

 

cd ~/Documents/cocos2d-iphone-1.0.0

 

Нажмите клавишу Return, чтобы перейти в каталог cocos2d, а затем введите следующую команду:

 

./install-templates.sh –f –u

 

Нажмите клавишу Return, чтобы запустить сценарий установки шаблона. Если все пойдет хорошо, вы увидите число напечатанных строк в окне терминала. Большинство из них будет начинаться с “…copying.” Если это так, теперь шаблоны должны быть установлены.

 

В моем случае попытка выполнить этот скрипт привела к следующей ошибке:

 

Error: This script must be run as root in order to copy templates to /Library/Application Support/Developer/Shared/Xcode

Поэтому я изменил команду вызова скрипта следубщим образом (только в этом случае вам прийдется еще ввести пароль рута):

 

sudo ./install-templates.sh –f –u

 

Если Вы получаете какую либо ошибку, то убедитесь, что вы изменили в cocos2d-iphone каталог с CD команду и команду для установки-templates.sh сценария правильная, включая пробелы между командой –f и –u опций. Если это не помогает, попробуйте использовать установку cocos2d которую я создал, чтобы облегчить проблему установки шаблонов. Вы можете воспользоваться инсталятором, ссылку на который я указал выше.

 

Создание первого cocos2d приложения

Теперь открываем Xcode и выберите  File -> New Project. В пользовательских шаблонов вы увидите cocos2d project templates, как показано на рисунке.

 

 

Выберите cocos2d и назовите его HelloWorld. Xcode создает проект на основе выбранного шаблона. При нажатии на кнопку Run, проект будет скомпилирован и запущен в симуляторе IOS. Результат должен выглядеть как на рисунке.

 

 

Приложение HelloWorld

С минимальными усилиями мы создали, полноценное cocos2d приложение. Заметьте, мы не написали не одной строчки кода, Xcode все сделал за нас.

 

Но теперь вы хотите знать, как она работает, не так ли? Давайте посмотрим, что находится в коде проекта HelloWorld и посмотреть, как это все работает, вы получите полный обзор того, как некоторые вещи связаны между собой. Не стесняйтесь экспериментировать  с  проектом HelloWorld. Во всяком случае вы можете начать все сначала с новым проектом, созданным с cocos2d шаблонов.

 

Расположение файлов HelloWorld

Если вы раньше никогда не работали с Xcode. По умолчанию, вы увидите панель под названием Project Navigator на левой части окна проекта Xcode, как показано на рисунке 2-4. Вот где Xcode сохраняет все ссылки на файлы, среди много других вещей, как цели исполняемых файлов. Просто сосредоточиться на группы и файлы, что сейчас ниже проекта HelloWorld.

 

В группе с именем cocos2d вы найдете все файлы игрового движка cocos2d. Не стесняйтесь исследовать эти файлы, если вам интересно, но если вы не знаете, что вы делаете, вы не должны изменять их. То же самое с другими cocos2d-родственных групп, они являются группами, которые не раскрываются на рисунке 2-4.

 

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

 

ВНИМАНИЕ: Project Navigator Xcode в области очень похож на папки и файлы в Finder. Не путайте то, что Xcode называет группами папок Finder. Вы можете иметь файлы в Xcode расположены во многих группах, но в Finder они могут и нормально все будет по-прежнему находится в той же папке. Они позволяют организовать файлы логически не влияя на их физическое расположение на жестком диске вашего компьютера.

 

Resources (ресурсы)
В группе ресурсов вы найдете (позже будите добавлять) все дополнительные файлы, которые не являются исходным кодом, такие как изображения и звуковые файлы и многое другое.

Default.png файла изображения, которое отображается при загрузки вашего приложения, и icon.png, значок Вашего приложения (подробнее об этом можно почитать в уроке Оформление приложений). Fps_images.png файл используется cocos2d для отображения кадров.

 

Supporting Files  (Файлы  поддержки)

Класс HelloWorld

Два класса составляют основу проекта HelloWorld. AppDelegate класс обрабатывает глобальные события приложения и изменения состояния, а классе HelloWorldLayer содержит весь код, который отображает label «Hello World».

 

AppDelegate

Каждое IOS приложение имеет один класс  AppDelegate, который реализует UIApplicationDelegate протокола. В нашем HelloWorld проект, он называется просто AppDelegate.

 

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

 

В большинстве случаев, есть только три вещи, которые вы можете изменить в cocos2d процесс инициализации:

 

<code data-result="[object Object]">[[CCDirector sharedDirector] setDeviceOrientation:kCCDeviceOrientationLandscapeLeft]; 
[[CCDirector sharedDirector] setAnimationInterval:1.0/60]; 
[[CCDirector sharedDirector] setDisplayFPS:YES];</code>

 

Device Orientation

Наиболее важным из них является установка ориентации устройства. Приложение HelloWorld работает в альбомной ориентаций, а значит, вы будете поварачивать ваше устройство боком. Если вы измените этот параметр kCCDeviceOrientationLandscapeLeft на kCCDeviceOrientationLandscapeRight, вы увидите, что сообщение «Hello World» теперь отображается с ног на голову по сравнению с тем, что было раньше. Вот список поддерживаемых ориентации устройств. Попробуйте каждый из них, чтобы увидеть, как изменяются надпись «Hello World»

 

  • kCCDeviceOrientationPortrait
  • kCCDeviceOrientationPortraitUpsideDown
  • kCCDeviceOrientationLandscapeLeft
  • kCCDeviceOrientationLandscapeRight

 

Кроме этого, вы можете изменить ориентацию устройства в любой момент времени, даже во время игры.

 

Animation Interval

Анимация интервала определяет, как часто в cocos2d происходит обновление экрана. По сути, это влияет на максимальную частоту кадров, которую игра может достигнуть.

 

Анимация интервал задается не кадрами в секунду. Тем не мение, она пределяет, как часто должны cocos2d обновления экрана. Именно поэтому данный параметр является 1.0/60. Потому что, 1 при делении на 60 дает результат 0,0167, что является интервалом в секундах между каждым вызовом для обновления экрана. Конечно, если ваша игра является сложной, она может принять процессора или GPU более 0,0167 секунды для отображения кадра, так что нет никакой гарантии, что 60 кадров в секунду будет достигнуто во всем. В самом деле, это ваша ответственность, чтобы заставить игру работать с высокой кадровой частотой. Я расскажу некоторые, методы повышения производительности в дальнейшем.

 

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

 

Примечание: Вы не можете сделать больше, чем 60 кадров в секунду на устройствах iOS. Дисплей устройства заблокирован для обновления больше 60-ти кадров в секунду (Гц), и попытка, cocos2d установить частоту более чем 60 кадров в секунду, в лучшем случае, ни к чему не приведет. В худшем случае, это действительно может замедлить частоту кадров. Установите animationInterval в 1.0/60, если вы хотите запустить cocos2d в максимально возможной скорость.

 

Display FPS

Включение FPS на дисплее появится небольшое число в левом нижнем углу экрана. Это текущая частота кадров кадров в секунду. В идеале, ваша игра должна быть установлена ​​на уровне 60 кадров в секунду на все времена, особенно, если это действие или подергивание на основе игры. Некоторые игры, такие как пазлы, могут нормально работать с постоянной частотой 30 кадров в секунду. FPS дисплей позволяет отслеживать частоту кадров и любые сбои или залипания которые игра получает.

 

Примечание: Если вам нужно настроить реакцию на дисплее FPS, вы можете сделать это, изменив CC_DIRECTOR_FPS_INTERVAL строчку в ccConfig.h. Вы найдете этот файл в cocos2d Sources/cocos2d группы. По умолчанию он установлен в 0.1, что означает, что частота кадров дисплей будет обновлен десять раз в секунду. При увеличении значения FPS дисплей в среднем в течение более длительного периода времени. Однако, вы не сможете увидеть резких, коротких падений частоты кадров, что еще может быть заметным. Имейте это в виду.

 

HelloWorldLayer

Класс  HelloWorldLayer, где чистый cocos2d код делает свое дело, чтобы отобразить label с текстом «Hello World». Прежде чем попасть в это, вы должны понимать, что cocos2d использует иерархию объектов CCNode, чтобы определить то, что отображается. Базовый класс для всех узлов CCNode класс, который содержит положения, но не имеет визуального представления. Это родительский класс для всех остальных классов, в том числе двух наиболее фундаментальным из них: CCScene и CCLayer.

 

CCScene является абстрактным понятием и ничего не делает больше, чем для обеспечения надлежащего размещения объектов на сцене, в соответствии с их координатами пикселей.  Таким образом, CCScene узел всегда используется в качестве родительского объекта для каждой иерархии сцены cocos2d. Большую часть времени Вы будете иметь только один ход сцены, кроме случаев, когда Вам нужен переход от одной сцены к другой.

 

Класс CCLayer делает очень мало сам по себе. Вы обычно используете его в качестве первого класса добавляемого в CCScene потому, что большинство игры используют по крайней мере, простой сенсорный ввод. Если вы откроете HelloWorldLayer.h заголовок файла, вы увидите, что HelloWorldLayer класса происходит от CCLayer. Итак, где же CCScene вступают в игру?

 

CCScene просто абстрактное понятие, поэтому для создания сцены всегда используется статический инициализатор +(id)scene. Этот метод создает объект CCScene, а затем добавляет экземпляр HelloWorldLayer класса на сцену. Почти во всех случаях, это единственное место, где CCScene создается и используется. Ниже приведен общий пример метода +(id)scene:

 

<code data-result="[object Object]">+(id) scene 
{
    CCScene *scene = [CCScene node]; 
    id layer = [HelloWorldLayer node]; 
    [scene addChild:layer]; 
    return scene; 
}</code>

 

Во-первых, CCScene объект создается с помощью статического инициализатора +(id)scene класса CCScene. Далее, наш класс HelloWorldLayer создается с помощью такого же метода +(id)node, а затем добавляется к сцене. Сцена, затем возвращается в вызывающую программу.

 

Переходя к -(id)init в примере ниже, вы заметите то, что может показаться странным: объекту присваивается возвращаемое значение инициализации, отправленного на супер объекта в обращении к self = [super init]. Если вы перешли из C++, вы будете дрожать от боли, глядя на это. Не стоит слишком расстраивается, все в порядке. Это просто означает, что в Objective-C, мы должны вручную вызвать метод инициализации суперкласса. Не существует  автоматического вызова родительского класса. И мы должны присвоить self возвращаемого значения [super init] сообщение, потому что он может возвратить пустое значение.

 

<code data-result="[object Object]">-(id)init {
    if ((self = [super init])) {
    // create and initialize a label
    CCLabelTTF* label = [CCLabelTTF labelWithString:@"Hello World"
    fontName:@"Marker Felt" fontSize:64];
    // get the window (screen) size from CCDirector 
    CGSize size = [[CCDirector sharedDirector] winSize];
    // position the label at the center of the screen 
    label.position = CGPointMake(size.width / 2, size.height / 2);
    // add the label as a child to this Layer
    [self addChild:label]; }
    return self;
}</code>

 

Класс CCLabelTTF отрисовывает текст на экране, используя TrueType шрифт.

 

Если вы глубоко обеспокоен как Objective-C программисты пишут вызова [super init], вот альтернатива, которая может облегчить ваш ум. Это принципиально то же самое, только не то, что традиция предписывает:

 

<code data-result="[object Object]">-(id)init 
{ 
    self = [super init]; 
    if (self != nil) { 
        // do init stuff here … 
    } 
    return self; 
}</code>

 

Теперь позвольте мне объяснить, как надпись добавляется на сцену. Если вы посмотрите еще ​​раз на инициализацию в первом варианте метода init, вы увидите, что объект CCLabelTTF создается с помощью одного из статических методов инициализации. Он будет возвращать новый экземпляр класса CCLabelTTF autoreleased объекта, который мы добавляем как child с помощью [self addChild:label] кода. Для label присваивается положение в центре экрана. Обратите внимание, что установка позиции до или после вызова AddChild не имеет значения.

Comments are closed.