【麦可网】Cocos2d-X跨平台游戏开发---学习笔记
第五课:HelloWorld
=======================================================================================================================================================================
课程目标:
-HelloWorld
课程重点:
-游戏生命周期
-HelloWorld开发,编译,运行,调试
考核目标:
-理解游戏生命周期
-掌握HelloWorld开发,编译,运行,调试
=======================================================================================================================================================================
一:游戏生命周期
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(); }
二:HelloWorld开发
#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://pan.baidu.com/s/1kTio1Av 【麦可网】Cocos2d-X跨平台游戏开发---笔记系列:http://blog.csdn.net/qiulanzhu