什么程序都是从HelloWorld先开始。同样Cocos2d-x我们先从HelloWorld进行下手、下面是HelloWorld的运行完成图:
建立好的Cocos游戏项目中会有两个比较常用接触的文件夹。分别为Classes与resource。Classes存取代码文件,resource存取资源文件,下面为完整的项目架构:
我们先来看下最基本的AppDelegate.cpp类
1 #include "AppDelegate.h" 2 #include "HelloWorldScene.h" 3 4 5 //命名空间 6 USING_NS_CC; 7 8 9 //构造函数 10 AppDelegate::AppDelegate() { 11 12 } 13 14 15 //析构函数 16 AppDelegate::~AppDelegate() 17 { 18 } 19 20 21 //程序启动完成后会进入的函数 22 bool AppDelegate::applicationDidFinishLaunching() { 23 24 //初始化导演 25 auto director = Director::getInstance(); 26 27 //获得OpenGL视图 28 auto glview = director->getOpenGLView(); 29 30 //如果没有获取OpenGL视图 31 if(!glview) 32 { 33 //创建OpenGL视图 34 glview = GLView::create("My Game"); 35 36 //设置OpenGL视图 37 director->setOpenGLView(glview); 38 } 39 40 //设置是否显示调试信息 41 director->setDisplayStats(true); 42 43 //设置帧率 44 director->setAnimationInterval(1.0 / 60); 45 46 //调用场景 47 auto scene = HelloWorld::createScene(); 48 49 //执行场景 50 director->runWithScene(scene); 51 52 return true; 53 } 54 55 56 //当程序进入后台后调用的函数(当在玩游戏时忽然别人打来电话时,程序进入后台) 57 void AppDelegate::applicationDidEnterBackground() { 58 59 //停止播放动画 60 Director::getInstance()->stopAnimation(); 61 62 //暂停播放背景音乐 63 //SimpleAudioEngine::getInstance()->pauseBackgroundMusic(); 64 } 65 66 67 //当程序重新被激活的时候调用的函数(声音重新响起) 68 void AppDelegate::applicationWillEnterForeground() { 69 70 //播放动画 71 Director::getInstance()->startAnimation(); 72 73 //继续播放背景音乐 74 //SimpleAudioEngine::getInstance()->resumeBackgroundMusic(); 75 } 76 77 78 HelloWorld.h文件 79 80 #ifndef __HELLOWORLD_SCENE_H__ 81 #define __HELLOWORLD_SCENE_H__ 82 83 #include "cocos2d.h" 84 85 //HelloWorld类继承自Layer类 86 class HelloWorld : public cocos2d::Layer 87 { 88 public: 89 //创建场景 90 static cocos2d::Scene* createScene(); 91 92 //初始化层 93 virtual bool init(); 94 95 //菜单响应函数 96 void menuCloseCallback(cocos2d::Ref* pSender); 97 98 //用于创建:场景、菜单、层等东西 99 CREATE_FUNC(HelloWorld); 100 }; 101 102 #endif
HelloWorldScene.cpp中的代码中的Scene* HelloWorld::scene(),实现了创建场景的过程::
1、创建场景
2、创建层
3、将层加到场景上
4、返回场景
HelloWorld.cpp
1 #include "HelloWorldScene.h" 2 3 //命名空间 4 USING_NS_CC; 5 6 //创建场景 7 Scene* HelloWorld::createScene() 8 { 9 //创建场景 10 auto scene = Scene::create(); 11 12 //创建层 13 auto layer = HelloWorld::create(); 14 15 //将层添加到场景中 16 scene->addChild(layer); 17 18 //返回场景 19 return scene; 20 } 21 22 //初始化层 23 bool HelloWorld::init() 24 { 25 //初始化父类的Layer 26 if(!Layer::init()) 27 { 28 return false; 29 } 30 31 //获得窗口的大小 32 Size visibleSize = Director::getInstance()->getVisibleSize(); 33 34 //获得坐标原点的坐标 35 Vec2 origin = Director::getInstance()->getVisibleOrigin(); 36 37 //用图片创建菜单项 38 //第一个参数:正常状态下的图片 39 //第二个参数:被选中时的图片 40 //第三个参数:响应函数 41 auto closeItem = MenuItemImage::create( 42 "CloseNormal.png", 43 "CloseSelected.png", 44 CC_CALLBACK_1(HelloWorld::menuCloseCallback, this)); 45 46 //设置菜单项的位置 47 closeItem->setPosition(Vec2(origin.x + visibleSize.width - closeItem->getContentSize().width/2 , 48 origin.y + closeItem->getContentSize().height/2)); 49 50 //创建菜单 51 auto menu = Menu::create(closeItem, NULL); 52 53 //设置菜单的坐标原点为左下角(菜单中默认的坐标原点在窗口的中央) 54 menu->setPosition(Vec2::ZERO); 55 56 //将菜单项添加到菜单中 57 this->addChild(menu, 1); 58 59 //创建一个标签 60 //第一个参数:标签中的内容 61 //第二个参数:字体 62 //第三个参数:字体大小 63 auto label = LabelTTF::create("Hello World", "Arial", 24); 64 65 //设置标签的位置 66 label->setPosition(Vec2(origin.x + visibleSize.width/2, 67 origin.y + visibleSize.height - label->getContentSize().height)); 68 69 //设置标签的位置 70 this->addChild(label, 1); 71 72 //创建一个精灵 73 auto sprite = Sprite::create("HelloWorld.png"); 74 75 //设置精灵的位置 76 sprite->setPosition(Vec2(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y)); 77 78 //将精灵添加到层中 79 this->addChild(sprite, 0); 80 81 return true; 82 } 83 84 //菜单响应函数 85 void HelloWorld::menuCloseCallback(Ref* pSender) 86 { 87 #if (CC_TARGET_PLATFORM == CC_PLATFORM_WP8) || (CC_TARGET_PLATFORM == CC_PLATFORM_WINRT) 88 MessageBox("You pressed the close button. Windows Store Apps do not implement a close button.","Alert"); 89 return; 90 #endif 91 92 //结束场景 93 Director::getInstance()->end(); 94 95 #if (CC_TARGET_PLATFORM == CC_PLATFORM_IOS) 96 exit(0); 97 #endif 98 }
HelloWorldScene.cpp中的 HelloWorld::init(),实现了初始化:
1、初始化父类的Layer
2、得到窗口的大小
3、得到窗口的坐标
4、创建菜单项
5、设置菜单项的位置
6、设置菜单的位置
7、将菜单加到层中
8、创建标签
9、设置标签的位置
10、将标签加到层上
11、创建精灵
12、设置精灵的位置
13、将精灵加到层上
1 #include "main.h" 2 #include "AppDelegate.h" 3 #include "cocos2d.h" 4 5 //命名空间 6 USING_NS_CC; 7 8 //Cocos2d-X的主函数(相当于C/C++中的main函数) 9 int APIENTRY _tWinMain(HINSTANCE hInstance, 10 HINSTANCE hPrevInstance, 11 LPTSTR lpCmdLine, 12 int nCmdShow) 13 { 14 //表示lpCmdLine、nCmdShow是两个没用的参数 15 UNREFERENCED_PARAMETER(hPrevInstance); 16 UNREFERENCED_PARAMETER(lpCmdLine); 17 18 //定义一个app对象 19 AppDelegate app; 20 21 //执行app对象的run函数。进入帧循环 22 return Application::getInstance()->run(); 23 }
main.cpp中的代码只是实现了下面的操作
定义一个App对象->执行App对象进入帧循环
一个游戏程序就这样执行起来,应运而生,是不是感觉特别的神奇。ok关于helloworld的解析就分享至此。下一章进入菜单篇的学习