x 的3D游戏制作官方教程(中文翻译)

Cocos2d-x 在版本3开始已经支持了3D游戏开发的特性,我在官网文档看到3D开发的部分,觉得有必要记录一下,权当做学习笔记。因为只花了半天时间翻译,而且能力有限,各位看官勿喷。

本博客虽然水分很足,但是也算是博主的苦劳了,

如需转载,请附上本文链接,不甚感激!

相信,你已经对Cocos2d-x有所了解,并且将它作为一种2D游戏引擎来看待。但是,从版本3开始,我们已经将3D一些特性添加到了Cocos2d-x里面。因为3D游戏是一个巨大的市场,所以,为了方便您进行3D游戏的开发,Cocos2d-x向您提供了所有你开发3D游戏时所需要的特性。或许对你而言,3D开发是一个新的领域,这里有一些软件、工具是你所需要了解了。

深吸一口气,不要紧张,我们将一步一步地带你走进3D开发的奇妙之旅!

1. Sprite3D

跟2D游戏一样,3D游戏开发同样也需要Sprite对象。Sprite对象是所有游戏的一个基础构件。3D Sprite相比于2D,除了x轴跟y轴,还多了一个z轴。Sprite3D的大部分用法都跟图片的Sprite没有两样。加载并显示一个Sprite3D对象非常简单,看代码:

auto sprite = Sprite3D::create(“boss.c3b”);sprite->setScale(5.f);sprite->setPosition(Vec2(200,200));scene->addChild(sprite);

以上代码,非常简单的就创建了一个Sprite3D对象,显示效果如下:

2. 专有名词

虽然并不涉及语言范畴,但是,在使用3D特性的时候,你还是需要了解这个领域的一些被广泛使用的专有名词。

3. 使用Sprite3D3.1 将3D模型载入到Sprite3D对象

上文已经提到,3D模型是一系列的mesh集合。你可以将一个3D模型附加到另一个3D模型中,以此来产生一些丰富的特效。比如,你可以将一个武器模型附加到任务模型中。为了达到这个效果,你需要找到武器需要附加的位置。在代码中,你可以使用 getAttachNode() 来进行添加。 例子:将一个3D模型附加到另一个3D模型中:

auto sp = Sprite3D::create(“axe.c3b”);sprite->getAttachNode(“Bip001 R Hand”)->addChild(sp);

代码显示的效果如下:

3.2 互换 3D Model

当进行3D开发的时候,你可以想要对模型进行动态的修改。比如,当人物能力值的变化,服装的改变,或者你想要通过模型在视觉上的变化来提醒用户状态的改变。如果你的3D模型是由mesh构成的,那么你可以使用 getMeshByIndex() 和 getMeshByName() 轻松的访问这些mesh。通过这些函数,你可以实现人物更换武器或者服装的效果。 我们来看一个关于女孩更换外套的例子:

我们可以通过改变一系列mesh对象,来更换女孩穿着的外套。下面的代码演示了如何实现这一功能:

auto sprite = Sprite3D::create(“ReskinGirl.c3b”);// display the first coatauto girlTop0 = sprite->getMeshByName(“Girl_UpperBody01”);girlTop0->setVisible(true);auto girlTop1 = sprite->getMeshByName(“Girl_UpperBody02”);girlTop1->setVisible(false);// swap to the second coatgirlTop0->setVisible(false);girlTop1->setVisible(true);

上述代码的演示效果如下:

4. Animation

Sprite3D 对象是构成游戏最本质的对象。我们已经在前面学会了如何操作它们。但是,你可能还想要一些更丰富的效果体验。加入一些动画效果吧!为了执行了一个动画效果,你需要使用 Animation3D 和 Animation3D 对象。然后,你可以使用 Animation3D 对象来创建一个Animate3D动作效果。来看例子:

// the animation is contained in the .c3b fileauto animation = Animation3D::create(“orc.c3b”);// creates the Action with Animation objectauto animate = Animate3D::create(animation);// runs the animationsprite->runAction(RepeatForever::create(animate));

文字无法展示动画效果,所以,你还是使用”Programmer Guide Sample”中的代码,来亲自体验这个动画特效吧!需要注意的是,3D动画和2D动画有共通之处,可以回到第4章再仔细研读一番。

4.1 多个动作

如果你想要在同一时间执行多重动作效果的时候,你该怎么做? 通过动画开始时间和动画序列长度这两个参数,你可以创建多重动画特效的叠加效果。这两个参数的单位都是秒,例子如下:

auto animation = Animation3D::create(fileName);auto runAnimate = Animate3D::create(animation, 0, 2);sprite->runAction(runAnimate);auto attackAnimate = Animate3D::create(animation, 3, 5);sprite->runAction(attackAnimate);

在上面的例子中,有两个动画特效得到了执行。第一个动作立刻执行,并执行了2秒钟。第二个在开始后的三秒钟才开始执行,并持续了5秒钟。

4.2 动画执行速度

动画的速度属性是一个正数,当然也有负数的速度,表示反方向。在这个例子中,速度被设定为10,这表示动画长度是10秒。

4.3 动画混合自己选择的路,跪着也要把它走完。

x 的3D游戏制作官方教程(中文翻译)

相关文章:

你感兴趣的文章:

标签云: