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

时间: 2024-10-17 20:27:42

【Cocos2d入门教程三】HelloWorld之一目了然的相关文章

jQuery 入门教程(三): Selectors

jQuery Selector 是jQuery库中非常重要的一个组成部分. jQuery Selector 用来选择某个HTML元素,其基本语句和CSS的选择器(Selector)是一样的,所有jQuery selector 都是以$()开始. 选择HTML标记 选择某个HTML元素的方法是直接使用该元素的标记名称,比如选择所有<p>元素 $("p") 下面的例子当用户点击一个按钮时,隐藏所有的<p>元素 $(document).ready(function()

BootStrap入门教程 (三)

上讲回顾:Bootstrap的基础CSS(Base CSS)提供了优雅,一致的多种基础Html页面要素,包括排版,表格,表单,按钮等,能够满足前端工程师的基本要素需求. Bootstrap作为完整的前端工具集,内建了大量的强大优雅可重用的组件,包括按钮(Button),导航(Navigation),标签(Labels),徽章(Badges),排版(Typography),缩略图( thumbnails),提醒(Alert),进度条(progress bar),杂项(Miscellaneous).

无废话ExtJs 入门教程三[窗体:Window组件]

无废话ExtJs 入门教程三[窗体:Window组件] extjs技术交流,欢迎加群(201926085) 1.代码如下: 1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 2 <html xmlns="http://www.w3.org/19

Git的入门教程&lt;三&gt;

Git 的入门教程<三> 4> git远程仓库的使用 续之前的(http://blog.csdn.net/xuheazx/article/details/43229781) 4.2 git远程服务器的搭建 我目前的服务器版本: Linux hehe.xu 2.6.32-358.el6.i686 #1 SMP Thu Feb 21 21:50:49 UTC 2013 i686 i686 i386 GNU/Linux 因为是为了做教程,所以采用的是虚拟机来进行搭建git服务器. 4.2.1

PySide——Python图形化界面入门教程(三)

PySide——Python图形化界面入门教程(三) ——使用内建新号和槽 ——Using Built-In Signals and Slots 上一个教程中,我们学习了如何创建和建立交互widgets,以及将他们布局的两种不同的方法.今天我们继续讨论Python/Qt应用响应用户触发的事件:信号和槽. 当用户执行一个动作——点击按钮,选择组合框的值,在文本框中打字——这个widget就会发出一个信号.这个信号自己什么都不做,它必须和槽连接起来才行.槽是一个接受信号的执行动作的对象. 连接内建P

BootStrap入门教程 (三) :可重用组件(按钮,导航,标签,徽章,排版,缩略图,提醒,进度条,杂项)

上讲回顾:Bootstrap的基础CSS(Base CSS)提供了优雅,一致的多种基础Html页面要素,包括排版,表格,表单,按钮等,能够满足前端工程师的基本要素需求. Bootstrap作为完整的前端工具集,内建了大量的强大优雅可重用的组件,包括按钮(Button),导航(Navigation),标签(Labels),徽章(Badges),排版(Typography),缩略图( thumbnails),提醒(Alert),进度条(progress bar),杂项(Miscellaneous).

RabbitMQ入门教程(三):Hello World

原文:RabbitMQ入门教程(三):Hello World 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/vbirdbest/article/details/78583480 分享一个朋友的人工智能教程(请以"右键"->"在新标签页中打开连接"的方式访问).比较通俗易懂,风趣幽默,感兴趣的朋友可以去看看. Hello World示例功能简介 功能描述

Elasticsearch入门教程(三):Elasticsearch索引&amp;映射

原文:Elasticsearch入门教程(三):Elasticsearch索引&映射 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/vbirdbest/article/details/79213163 索引概念简介 通常说的索引有两种词性,名称和动词. 动词索引indexing,索引一个文档,表示把一个文档存储到索引Index里,可以用来查询和检索,es采用倒排索引 名词索引index,

react-redux入门教程(三)

Redux 入门教程(三):React-Redux 的用法 作者: 阮一峰 日期: 2016年9月21日 前两篇教程介绍了 Redux 的基本用法和异步操作,今天是最后一部分,介绍如何在 React 项目中使用 Redux. 为了方便使用,Redux 的作者封装了一个 React 专用的库 React-Redux,本文主要介绍它. 这个库是可以选用的.实际项目中,你应该权衡一下,是直接使用 Redux,还是使用 React-Redux.后者虽然提供了便利,但是需要掌握额外的 API,并且要遵守它