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

二、游戏逻辑架构

通过对HelloWorld程序的分析,我们可以得到游戏运行的简单逻辑架构:

luoji

至此,我们cocos入门的学习路线也清晰明了了,当然,这只是最基本的学习内容,但是它却相当于一棵大树的主干,以后的深入学习也都是此主干为基础,比如Director还有其它哪些管理Scene的方法?这里我们能够学到Scene栈的结构。比如Layer如何与用户交互?这里我们能够学到touch触摸事件。比如怎么能够使Sprite运动?这里我们能够学到动作。我们在实际应用中往往会不断有新的需求,随着不断的解决这些需求,我们的学习自然就深入了。

0 0
原创粉丝点击