Cocos2d-x RU‎ > ‎

Статья 2

Статья 2. AppDelegate

Доброго времени суток :) 
Хотел было начать рассказ про CCDirector, но потом подумал, что неплохо бы рассказать о классе AppDelegate. Обычно этот класс уже сгенерирован для Вас в базовом проекте HelloWorld. Запуск приложения начинается с метода applicationDidFinishLaunching();
В этом методе настраиваются параметры движка и запускается главная сцена.
Также у данного класса есть еще два метода, первый 
void applicationDidEnterBackground()
и второй void applicationWillEnterForeground(). Первый метод получает управление, когда приложение приостановлено. Например во время игры кто-то позвонил. В нем нам надо задать действия перед уходом приложения в спящий режим(обычно ставят на паузу фоновую музыку). Соответственно второй метод вызывается, когда приложение опять становится активным. В этом методе надо задать действия при выходе приложения на первый план(обычно восстанавливают фоновую музыку).
Итак, вот как выглядит мой код:
объявление:

Код
#ifndef  _APP_DELEGATE_H_
#define  _APP_DELEGATE_H_

#include "CCApplication.h"
#include "GameLayer.h"
using namespace cocos2d;
class  TAAppDelegate : private cocos2d::CCApplication
{
    CCDirector* pDirector;
    
public:
    CCScene* gameScene;
    TAAppDelegate();
    virtual ~TAAppDelegate();
    virtual bool initInstance();
    virtual bool applicationDidFinishLaunching();
    virtual void applicationDidEnterBackground();
    virtual void applicationWillEnterForeground();
};

#endif // _APP_DELEGATE_H_
И реализация класса:

Код
//
//  MoonwalkerAppDelegate.cpp
//  Moonwalker
// ANDROID
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
#include "AppDelegate.h"
#include "cocos2d.h"
#include "CCEGLView.h"
#include "IntroLayer.h"
#include "Const.h"
#include "SimpleAudioEngine.h"

USING_NS_CC;

TAAppDelegate::TAAppDelegate()
{
}

TAAppDelegate::~TAAppDelegate()
{
}



bool TAAppDelegate::initInstance()
{
    return true;
}

bool TAAppDelegate::applicationDidFinishLaunching()
{
    pDirector = CCDirector::sharedDirector();
    pDirector->setOpenGLView(CCEGLView::sharedOpenGLView());
    bool bRet = false;
        do
        {  
        myconst->SCREEN_WIDTH=1280;
        myconst->SCREEN_HEIGHT=720;
        CCEGLView::sharedOpenGLView()->setDesignResolutionSize(myconst->SCREEN_WIDTH, myconst->SCREEN_HEIGHT,  kResolutionShowAll);
        bRet = true;
    } while (0);
    pDirector->setAnimationInterval(1.0 /60);
    CCScene *pScene = TAGameIntro::scene();
    // run
    myconst->appdelegate=this;
    pDirector->runWithScene(pScene);
    return true;
}
void TAAppDelegate::applicationDidEnterBackground()
{
    CocosDenshion::SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
        CCDirector::sharedDirector()->pause();   
}
void TAAppDelegate::applicationWillEnterForeground()
{
        SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
        CCDirector::sharedDirector()->resume();
}
#else
// версия для APPLE
#endif

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

Код
pDirector = CCDirector::sharedDirector();


Инициализируем OpenGL, кстати тоже синглтон.
Код
pDirector->setOpenGLView(CCEGLView::sharedOpenGLView());


в этих строчках я устанавливаю виртуальное разрешение экрана для своей игры, класс myconst — тоже синглтон. 
Код
myconst->SCREEN_WIDTH=1280;
myconst->SCREEN_HEIGHT=720;


устанавливаем разрешение экрана.
Код
CCEGLView::sharedOpenGLView()->setDesignResolutionSize(myconst->SCREEN_WIDTH, myconst->SCREEN_HEIGHT,  kResolutionShowAll);


директору устанавливаем наш FPS
Код
pDirector->setAnimationInterval(1.0 /60);


создаем сцену, и передаем ей управление. 
Код
CCScene *pScene = TAGameIntro::scene();
pDirector->runWithScene(pScene);



На что еще обратить внимание... 
Вот на это 

Код
#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)
//android code
#else
// apple code
#endif

все что начинается с # - это команды для препроцессора. Здесь мы видим условные операторы, которые позволяют нам организовать условную компиляцию. Таким образом будет скомпилирован нужный код, в зависимости от мобильной платформы.
Забыл сказать про метод initInstance() - в этом методе можно произвести инициализацию объектов до вызова applicationDidFinishLaunching()

Все, игра запустилась, мы видим заставку.
:rolleyes:

Comments