【麦可网】Cocos2d-X跨平台游戏开发---学习笔记
第五课:Hello World
=======================================================================================================================================================================
课程目标:
- Hello World
课程重点:
- 游戏生命周期
- Hello World开发,编译,运行,调试
考核目标:
- 理解游戏生命周期
- 掌握Hello World开发,编译,运行,调试
=======================================================================================================================================================================
一:游戏生命周期
class AppDelegate : private cocos2d::CCApplication
{
public:
AppDelegate();
virtual ~AppDelegate();
/**
@brief 在这里实现CCDirector 和CCScene 初始化代码.
@return true 初始化成功, app 继续执行.
@return false 初始化失败, app 终止.
*/
virtual bool applicationDidFinishLaunching();
/**
@brief 当应用程序进入后台时,该函数被调用
@param 该应用程序的指针
*/
virtual void applicationDidEnterBackground();
/**
@brief 当应用程序进入前台时,该函数被调用
@param 该应用程序的指针
*/
virtual void applicationWillEnterForeground();
};
----------------------------------------------------------------------------------------------------------------------
bool AppDelegate::applicationDidFinishLaunching()
{
// 初始化导演
CCDirector *pDirector = CCDirector::sharedDirector(); //单例模式
pDirector->setOpenGLView(&CCEGLView::sharedOpenGLView());
// enable High Resource Mode(2x, such as iphone4) and maintains low resource on other devices.
// pDirector->enableRetinaDisplay(true);
// true:显示FPS,false:不现实FPS
pDirector->setDisplayFPS(true);
// 设置FPS. 不调用函数的情况下默认值是 1.0/60
pDirector->setAnimationInterval(1.0 / 60);
// 创建一个场景. 该场景自动释放资源
CCScene *pScene = HelloWorld::scene();
// 运行
pDirector->runWithScene(pScene);
return true;
}
// 当app 进入后台时,该函数会被调用。当有电话打来时,函数也会被调用。
void AppDelegate::applicationDidEnterBackground()
{
CCDirector::sharedDirector()->pause();
SimpleAudioEngine::sharedEngine()->pauseBackgroundMusic();
}
// 当app回复到前台时,该函数被调用
void AppDelegate::applicationWillEnterForeground()
{
CCDirector::sharedDirector()->resume();
SimpleAudioEngine::sharedEngine()->resumeBackgroundMusic();
}
二:Hello World开发
#include "cocos2d.h"
#include "Box2D/Box2D.h" //引用物理引擎
#include "SimpleAudioEngine.h" //引用声音引擎
class HelloWorld : public cocos2d::CCLayer <span style="white-space:pre"> </span>//继承图层
{
public:
// 这里cocos2d-x和cocos2d-iphone有所不同,cocos2d-x中的方法’init’ 返回bool;cocos2d-iphone中的’init’返回id
virtual bool init();
// cpp中没有'id',建议返回类指针
static cocos2d::CCScene* scene();
// 回调函数
virtual void menuCloseCallback(CCObject* pSender);
// 手动实现"static node()" 方法
LAYER_NODE_FUNC(HelloWorld);
};
----------------------------------------------------------------------------------------------------------------------
// 每个CCLayer的子类都必须实现静态“node”方法
#define LAYER_NODE_FUNC(layer) \
static layer* node() \
{ \
layer *pRet = new layer(); \
if (pRet && pRet->init()) \
{ \
pRet->autorelease(); \
return pRet; \
} \
else \
{ \
delete pRet; \
pRet = NULL; \
return NULL; \
} \
};
----------------------------------------------------------------------------------------------------------------------
CCScene* HelloWorld::scene()
{
CCScene * scene = NULL;
do
{
// 'scene' 具有自动释放机制
scene = CCScene::node();
CC_BREAK_IF(! scene); //#define CC_BREAK_IF(cond) if(cond) break;
// 'layer' 具有自动释放机制
HelloWorld *layer = HelloWorld::node();
CC_BREAK_IF(! layer);
// 将图层添加到场景中
scene->addChild(layer);
} while (0);
// 返回场景
return scene;
}
----------------------------------------------------------------------------------------------------------------------
bool HelloWorld::init()
{
//
// 1. 初始化父类
if ( !CCLayer::init() )
{
return false;
}
/
// 2.用"X" 图片添加一个菜单项, 用于点击推出程序
// 你可以改变它.
// 添加一个"close" 图标去退出这个程序. 它具有自动释放机制
CCMenuItemImage *pCloseItem = CCMenuItemImage::itemFromNormalImage(
"CloseNormal.png",
"CloseSelected.png",
this,
menu_selector(HelloWorld::menuCloseCallback) );
pCloseItem->setPosition( ccp(CCDirector::sharedDirector()->getWinSize().width - 20, 20) );
// 创建一个菜单,具有自动释放机制
CCMenu* pMenu = CCMenu::menuWithItems(pCloseItem, NULL);
pMenu->setPosition( CCPointZero ); //CCPointZero = CCPoint((0), (0))
this->addChild(pMenu, 1);
/
// 3.在下面添加你的代码
// 添加标签显示"Hello World"
// 创建和初始化一个标签
CCLabelTTF* pLabel = CCLabelTTF::labelWithString("Hello World", "Arial", 24);
// 通过导演获得窗口大小
CCSize size = CCDirector::sharedDirector()->getWinSize();
// 将标签放在屏幕中间
pLabel->setPosition( ccp(size.width / 2, size.height - 50) );
// 将标签添加到图层中
this->addChild(pLabel, 1);
// 添加"HelloWorld"背景图片精灵"
CCSprite* pSprite = CCSprite::spriteWithFile("HelloWorld.png");
// 将背景图片精灵设置在屏幕中间
pSprite->setPosition( ccp(size.width/2, size.height/2) );
// 添加背景图片精灵到图层
this->addChild(pSprite, 0); //第二个参数zOrder可改变显示顺序
return true;
}
----------------------------------------------------------------------------------------------------------------------
void HelloWorld::menuCloseCallback(CCObject* pSender)
{
CCDirector::sharedDirector()->end();
#if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS)
exit(0);
#endif
}
三、调试
CCLog(“log”)——打印信息
F5——启动调试
F10——逐过程调试
F11——逐语句调试(会进入函数)
======================================================================
总结:
动手写才会有感觉,光看不练等于白看。
轻松一刻:
小兔子去钓鱼,第一天没有钓到;
第二天又空手而归;
第三天眼看着就要过去了,小兔子很失望,决定回去了。
突然一条鱼从水里跳出来对兔子喊着:“小兔崽子,再拿胡萝卜当诱饵,小心我拍死你!”
【麦可网】Cocos2d-X跨平台游戏开发---笔记系列:http://blog.csdn.net/qiulanzhu