上一节我们讲了如何安装Cocos2d-x的开发环境和怎样创建新项目,这一节我们讲Cocos2d-x的一些基本概念。如果你在阅读本节的话,那你应该是多少知道一点Cocos2d-x的。相信你也肯定是梦想着能用Cocos2d-x做一款自己专属的游戏。好的,让我和你一起开始向梦想迈进。
Cocos2d-x是一个跨平台的游戏开发引擎。什么是游戏引擎?简单来说就是就一套开发包,其中实现了我们制作游戏所需要的所有功能,和我们平时用的SDK差不多。Cocos2d-x的跨平台特性很强大,只需要很少的工作我们就可以把自己开发出来的游戏部署到不同的平台上,这一点是Cocos2d-x被大家喜爱的地方。并且它提供的API非常简洁,所有复杂的技术细节都在引擎内部实现,这使我们可以把更多精力用在游戏开发本身上。Cocos2d-x有一些典型的概念,例如Director、Scene、Node、Sprite、Action等,下面我们来逐一介绍一下。
1、Director,导演。这里我们可以把我们的游戏想象成一部电影,这个Director正是这部电影的导演,而你就是这部电影的制片人。你要通过导演去拍摄这部电影,它来控制电影中各个场景的切换。
2、Scene,场景。我们平时在玩游戏时会有游戏的开始画面、各个关卡、通关画面等。在开发的过程中我们用什么来代表它们呢?就是Scene。各个不同场景由不同Node渲染而成,最终形成了我们看到的游戏画面。下面是一个典型的游戏场景:
说到这里我们要讲一下Scene Graph的概念,我们在Scene Graph上完成各个Node的渲染。在同一个Scene Graph渲染的Node会遵循一个顺序,这个顺序可以用一个树状图来描述:
F代表根Node,每当Node被渲染时都是左边的Node先被渲染右边的Node后被渲染,也就是后被渲染Node会覆盖之前渲染的Node。在上图中各个Node被渲染的顺序是A->B->C->D->E->F->G->H->I。在Cocos2d-x中我们通过addChild()这个API来构建Scene Graph。
scene->addChild(title_node,-2); scene->addChild(label_node); scene->addChild(sprite_node,1);addChild()由相对根Node调用,第二个参数表示添加Node的z-order,当z-order为负数时Node位于树状结构的左侧,为正数时Node位于树状图的右侧。当没有指定z-order时,默认z-order为0,也就是处于树状结构的中间。
3、Sprite,精灵。有可能你不理解什么是Sprite,其实它就是你在游戏上可以操控的物体,大多数你在游戏上控制的角色都是Sprite。也许你会问是不是你在游戏上看到的所有物体都是精灵呢?不是的,只有那些你能控制的才是Sprite,其他你不操控的物体都是普通Node,例如Label。创建精灵很简单,在Cocos2d-x中你只需要调用Sprite::create()就可以创建一个精灵。
// This is how to create a sprite auto mySprite = Sprite::create("mysprite.png"); // this is how to change the properties of the sprite mySprite->setPosition(Vec2(500,0)); mySprite->setRotation(40); mySprite->setScale(2.0); // sets scale X and Y uniformly mySprite->setAnchorPoint(Vec2(0,0));创建Sprite时可以指定引用的图片,创建之后还可以设置它的各种属性,上面的代码分别设置了Sprite的位置、旋转、缩放比例、和锚点,其中有一些概念我们会在后面的教程中讲到。
4、Action,行为或者理解为动作。当我们创建了一个Scene并在上面创建了Sprite之后,我们接下来要做的肯定是要要让Sprite动起来,这个时候就该Action上场了。下面的代码中我们创建两个移动的Action
auto mySprite = Sprite::create("Blue_Front1.png"); // Move a sprite 50 pixels to the right,and 10 pixels to the top over 2 seconds. auto moveBy = MoveBy::create(2,Vec2(50,10)); mySprite->runAction(moveBy); // Move a sprite to a specific location over 2 seconds. auto moveTo = MoveTo::create(2,10)); mySprite->runAction(moveTo);MoveBy::create(2,10))创建一个相对移动的Action,MoveTo::create(2,10))创建一个移动到绝对位置的Action,当然还要runAction函数才能让Sprite执行这个Action。create函数的第一个参数为执行这个Action需要的时间,单位为s。下图展示了Sprite执行了Action之后的位置变化。
5、Sequence,序列。Sequence用于当你需要执行一系列Action时,用法如下
auto mySprite = Node::create() // move to point 50,10 over 2 seconds auto moveTo1 = MoveTo::create(2,10)); // move from current position by 100,10 over 2 seconds auto moveBy1 = MoveBy::create(2,Vec2(100,10)); // move to point 150,10 over 2 seconds auto moveTo2 = MoveTo::create(2,Vec2(150,10)); // create a delay auto delay = DelayTime::create(1); mySprite->runAction(Sequence::create(moveTo1,delay,moveBy1,delay->clone(),moveTo2,nullptr));6、Spawn,这个词翻译成中文为“大量”的意思,在Cocos2d-x中用于同时执行一些Action,不过用法很简单
auto myNode = Node::create() auto moveTo1 = MoveTo::create(2,10)); auto moveBy1 = MoveBy::create(2,10)); auto moveTo2 = MoveTo::create(2,10)); myNode->runAction(Spawn::create(moveTo1,nullptr));执行上面代码时Node将会同时执行上面三个Action,产生三个Action叠加的运动效果。
最后我们说一下parent Node的问题,Cocos2d-x上除了根Node外,其它Node都是被添加到parent Node上的,如果我们更改parent Node的属性,那么在它上面上添加的child Node也将受到影响。下图中三个Sprite在一个Node上
当这个Node执行了下面代码之后你会发现这个Scene中处于同一个Node的三个Sprite同时发生了改变
auto myNode = Node::create(); // rotating by setting myNode->setRotation(50);
三个Sprite同时顺时针转了50°,当parent Node的其它属性被修改时也与之类似。
这一节我们讲了Cocos2d-x的一些基本概念,如果你不是很理解也不要紧,后面我们会深入讲解这些概念。
下一节我们将具体讲解Sprite。
原文链接:https://www.f2er.com/cocos2dx/342093.html