【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的解析就分享至此。下一章进入菜单篇的学习

浙公网安备 33010602011771号