Cocos引擎3D揭秘:《捕鱼达人3》教程分享

Amanda_zhang 2014-08-15 05:36:24
加精
7月中旬,触控科技发布《捕鱼达人3》,24小时即获得1千万下载,并获得苹果商店首页精品推荐。而在刚结束不久的ChinaJoy上,《捕鱼达人3》亦大展风采,炫酷的3D效果与新奇的体感玩法吸引了众多玩家纷纷尝试。

《捕鱼达人3》采用Cocos引擎3D技术进行开发,实现了完全的3D化。作为一款支撑了无数2D游戏产品的引擎,Cocos 2d-x本次也将带来3D方面的功能扩展,帮助广大Cocos 2d-x开发者快速进入3D游戏产品的研发时代。

本次,小编就深入幕后,通过4段教程对《捕鱼达人3》进行解秘,一起来看看吧!

第一部分:加载鱼的模型和播放动画

在3D游戏的开发中,模型的加载与骨骼动画的播放是非常基础也是很重要的工作。《捕鱼达人3》中,每一条鱼都是美术师在3d max或maya等3D建模软件中进行模型和骨骼动画的建立,最终导出为通用的模型文件格式.fbx。并通过Cocos 2d-x所附带的转换工具fbx-conv.exe将它转换为可以加载到Cocos 2d-x中进行显示和播放的文件格式。该文件格式有两种类型,一个是c3t,即文本格式的模型文件,另一个是c3b,即二进制格式的模型文件。

在使用Cocos 2d-x进行2D游戏的开发时,最常用的一个类是Sprite,即“图片精灵”,对于精灵的动画操作,只需要精灵调用相应的 Action就可以。 为方便快速地进行3D游戏的开发,Cocos 2d-x引擎也提供了相应的3D的精灵类和播放骨骼动画的Action,下面将用《捕鱼达人3》中的乌龟模型来演示一下这个过程。

首先,打开Cocos 2d-x 3.x,拷贝一份ccp-empty-test设为当前项目,然后在Class目录中建立一个基于Layer派生出的层用于演示,这里将其命名为FishLayer。

在这个层里加入相应的精灵成员和相应的动作:
在3D游戏的开发中,模型的加载与骨骼动画的播放是非常基础也是很重要的工作。《捕鱼达人3》中,每一条鱼都是美术师在3d max或maya等3D建模软件中进行模型和骨骼动画的建立,最终导出为通用的模型文件格式.fbx。并通过Cocos 2d-x所附带的转换工具fbx-conv.exe将它转换为可以加载到Cocos 2d-x中进行显示和播放的文件格式。该文件格式有两种类型,一个是c3t,即文本格式的模型文件,另一个是c3b,即二进制格式的模型文件。

在使用Cocos 2d-x进行2D游戏的开发时,最常用的一个类是Sprite,即“图片精灵”,对于精灵的动画操作,只需要精灵调用相应的 Action就可以。 为方便快速地进行3D游戏的开发,Cocos 2d-x引擎也提供了相应的3D的精灵类和播放骨骼动画的Action,下面将用《捕鱼达人3》中的乌龟模型来演示一下这个过程。

首先,打开Cocos 2d-x 3.x,拷贝一份ccp-empty-test设为当前项目,然后在Class目录中建立一个基于Layer派生出的层用于演示,这里将其命名为FishLayer。

在这个层里加入相应的精灵成员和相应的动作:
//这是用于显示3D鱼模型的层
//这是用于显示3D鱼模型的层
class FishLayer : public cocos2d::Layer
{

public:
//初始化当前层
virtual bool init();
CREATE_FUNC(FishLayer);
protected:

//鱼精灵
cocos2d::Sprite3D* _sprite;
//向前游的动作
cocos2d::Animate3D* _swim;
//受伤的动作
cocos2d::Animate3D* _hurt;
};

接着,在层的初始化函数中加入精灵的创建代码:

bool FishLayer::init()
{
//加载模型文件
std::string fileName = "tortoise.c3b";
_sprite = Sprite3D::create(fileName);
_sprite->setScale(0.1f);
auto s = Director::getInstance()->getWinSize();
_sprite->setPosition(Vec2(s.width * 4.f / 5.f, s.height / 2.f));
addChild(_sprite);

//获取骨骼动画信息
auto animation = Animation3D::create(fileName);
if (animation)
{
//从起始到1.933秒截取为游泳动作
_swim = Animate3D::create(animation, 0.f, 1.933f);
_swim->retain();

//从1.933秒到2.8秒截取为受伤的动作
_hurt = Animate3D::create(animation, 1.933f, 2.8f);
_hurt->retain();

//让精灵循环播放游泳和的受伤动作
Sequence* pSequence = Sequence::create(_swim,_hurt,NULL);
_sprite->runAction(RepeatForever::create(pSequence));
}

return true;
}

将模型资源tortoise.c3b和用到的贴图tortoise.png以及背景图Sea.jpg放到资源目录下,运行程序,这时就可以看到呆萌的小乌龟显示在屏幕中了,它向前游动一下后会播放受伤的动作,如此反复,不停地循环。是不是很简单呢?

...全文
7428 45 打赏 收藏 转发到动态 举报
写回复
用AI写文章
45 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_36253732 2016-09-29
  • 打赏
  • 举报
回复
资源能给个吗--
abc-_123 2014-08-30
  • 打赏
  • 举报
回复
Cocos 3D前景怎么样?
qq_19982831 2014-08-23
  • 打赏
  • 举报
回复
qq_17475457 2014-08-22
  • 打赏
  • 举报
回复
楼主可以分享源代码吗
ajie1109 2014-08-21
  • 打赏
  • 举报
回复
这年头还有人用这吗?
我来逗你玩啦 2014-08-21
  • 打赏
  • 举报
回复
dennis_ben 2014-08-21
  • 打赏
  • 举报
回复
不错不错,拿来学习学习!
  • 打赏
  • 举报
回复
楼主应该开一个博客,然后发博客地址,而不是放到论坛里来吊大家胃口
kunkunqian 2014-08-19
  • 打赏
  • 举报
回复
厉害
hcn871111 2014-08-19
  • 打赏
  • 举报
回复
向楼主学习学习
满衣兄 2014-08-18
  • 打赏
  • 举报
回复
GW786228836 2014-08-18
  • 打赏
  • 举报
回复
hanger1212 2014-08-18
  • 打赏
  • 举报
回复
感谢分享 长知识了
云满笔记 2014-08-18
  • 打赏
  • 举报
回复
感谢分享 长知识了
jenly10 2014-08-18
  • 打赏
  • 举报
回复
filna 2014-08-18
  • 打赏
  • 举报
回复
向楼主学习学习
cx1109123 2014-08-17
  • 打赏
  • 举报
回复
围观~可以学习一下
addnew168 2014-08-17
  • 打赏
  • 举报
回复
很有幫助喔,謝謝大大
风华渐逝 2014-08-17
  • 打赏
  • 举报
回复
感觉这个引擎好像很厉害
austin9972 2014-08-17
  • 打赏
  • 举报
回复
加载更多回复(17)

8,301

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧