【Cocos2d入门教程三】HelloWorld之一目了然

什么程序都是从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的解析就分享至此。下一章进入菜单篇的学习



 

 

 
 
posted @ 2015-08-09 19:27  蔡明勇  阅读(7560)  评论(5编辑  收藏  举报