cocos2dx基础概念(一)
来源:互联网 发布:seo教程下载 编辑:程序博客网 时间:2024/05/22 08:11
一、简析HelloWorld
熟话说,万事开头难,学习一门新的技术,我们首先应该理清思路,从哪里下手,学习的顺序是怎样的?我们新建项目的时候生成的HelloWorld程序,虽然简单,但却包含了cocos入门最基本也是最重要的元素。首先,找到游戏真正的入口函数applicationDidFinishLaunching,抛开OpenGL相关,我们提取主要代码如下:
bool AppDelegate::applicationDidFinishLaunching() { // 获取Director实例 auto director = Director::getInstance(); // 创建Scene对象,包含有显示的内容 auto scene = HelloWorld::createScene(); // 运行Scene director->runWithScene(scene); return true;}
这样,就在屏幕中显示出了一个场景,从中我们得到两个重要概念,Director与Scene,具体的内容我们稍后分析,那么,这个场景中到底有什么?从上面的代码,我们不难看出,答案就在createScene之中,我们进去看一下:
Scene* HelloWorld::createScene(){ // 创建Scene对象 auto scene = Scene::create(); // 创建HelloWorld对象 auto layer = HelloWorld::create(); // 将HelloWorld对象加入Scene scene->addChild(layer); // 返回包含HelloWorld对象的Scene对象 return scene;}
我们发现Scene在这里只是充当了HelloWorld对象的容器,其它什么也没做,那么这个HelloWorld是什么?跳到头文件,我们发现它是一个继承自Layer的子类,这里我们得出第三个重要概念,Layer,那么Layer中又有什么?我们再到create函数中看看,发现这里的create函数是通过CREATE_FUNC这个宏定义的,我们将create还原:
static HelloWorld* create() { HelloWorld *pRet = new(std::nothrow) HelloWorld(); if (pRet && pRet->init()) { pRet->autorelease(); return pRet; } else { delete pRet; pRet = nullptr; return nullptr; } }
这里我们发现,create函数其实就是在内存中为对象分配了一块空间,如果分配成功,则调用init方法,然后返回该对象。我们发现在返回对象前,该对象调用了一下autorelease方法,这里是内存管理相关的知识,先行略过,我们进入init方法,简化之后:
bool HelloWorld::init(){ //调用父类init方法 Layer::init(); // 获取可见尺寸 auto visibleSize = Director::getInstance()->getVisibleSize(); // 添加HelloWorld文字 auto label = Label::createWithTTF("Hello World", "fonts/Marker Felt.ttf", 24); // 设置Label位置 label->setPosition(Vec2(visibleSize.width/2, visibleSize.height - label->getContentSize().height)); // 添加HelloWorld图片 auto sprite = Sprite::create("HelloWorld.png"); // 设置Sprite的位置 sprite->setPosition(Vec2(visibleSize.width/2, visibleSize.height/2)); // 将Sprite添加到当前Layer this->addChild(sprite, 0); return true;}
这样,屏幕中就显示出了HelloWorld的文字和图片,这里我们得到第四个重要概念,Sprite,也就是我们能够直接在屏幕中看到的元素:
二、游戏逻辑架构
通过对HelloWorld程序的分析,我们可以得到游戏运行的简单逻辑架构:
至此,我们cocos入门的学习路线也清晰明了了,当然,这只是最基本的学习内容,但是它却相当于一棵大树的主干,以后的深入学习也都是此主干为基础,比如Director还有其它哪些管理Scene的方法?这里我们能够学到Scene栈的结构。比如Layer如何与用户交互?这里我们能够学到touch触摸事件。比如怎么能够使Sprite运动?这里我们能够学到动作。我们在实际应用中往往会不断有新的需求,随着不断的解决这些需求,我们的学习自然就深入了。
- cocos2dx基础概念(一)
- cocos2dx基础概念(二)
- Cocos2dx基础概念
- 一、cocos2dx概念简介
- 网络基础概念(一)
- OpenGL基础概念(一)
- 财务会计基础(一)概念
- mysql(一) 基础概念
- 网络基础概念(一)
- Java多线程基础一(基础概念)
- cocos2dx 札记1 - 基础概念梳理
- web基础概念综述(一)
- Springframework(一)spring基础概念介绍
- C++ 基础概念收藏 (一)
- 基础学习--表的概念(一)
- 自学HTML--笔记(一)基础概念
- Object-c的基础概念(一)
- 云计算笔记(一):基础概念
- http与https的区别
- 算法学习第一天-搭建能运行算法第四版的代码
- Windows系统三种定时器的分析
- 容器及组件设计思想
- ubuntu14.04 ssh的安装及使用方法
- cocos2dx基础概念(一)
- Intersection of Two Arrays II两个数组交集(重要!)
- Non-Mathematical Feature Engineering techniques for Data Science
- Node.js 吊炸天的文件操作
- Nexus搭建
- android 面试
- bat转换成exe
- 01、css引入方式
- 模拟实现 memmove