cocos2d-x 3.3 Sprite3D人物换装代码解析
发布时间:2020-12-14 19:38:13 所属栏目:百科 来源:网络整理
导读:Sprite3D与Sprite相似,只不过它是3D的。你可以使用内置的create函数初始化一个Sprite3D对象。 auto sprite = Sprite3D::create(fileName);sprite-setScale(4);sprite-setRotation3D(Vec3(0,0)); 目前 Sprite3D 支持以下三种格式 obj:obj是通过3ds Max或May
Sprite3D与Sprite相似,只不过它是3D的。你可以使用内置的create函数初始化一个Sprite3D对象。 auto sprite = Sprite3D::create(fileName); sprite->setScale(4); sprite->setRotation3D(Vec3(0,0)); 目前 Sprite3D 支持以下三种格式
Animation 3D运行Sprite3D的动画我们可以使用 Animation3D 和 Animate3D类。Animation3D可以用“c3b”或“c3t”格式的文件创建,Animate3D则通过Animation3D对象创建。Animate3D是ActionInterval的子类,所以你可以使用runAction()运行它。这就像是Animation与Animate之间的关系一样std::string fileName = "Sprite3DTest/ReskinGirl.c3b"; auto sprite = Sprite3D::create(fileName); sprite->setScale(4); sprite->setRotation3D(Vec3(0,0)); addChild(sprite); sprite->setPosition( Vec2( p.x,p.y-60) ); auto animation = Animation3D::create(fileName); if (animation) { auto animate = Animate3D::create(animation); sprite->runAction(RepeatForever::create(animate)); }下面着重看一下3.3中所带例子的换装效果实现 首先是界面的初始化,构造函数里的字体按钮就跳过不说了,相信大家看懂都无压力 void Sprite3DReskinTest::addNewSpriteWithCoords(Vec2 p) { //ReskinGirl.c3b里保存了女郎所执行动画的所有零件(姑且这么叫吧)包括衣服,鞋子等等 std::string fileName = "Sprite3DTest/ReskinGirl.c3b"; auto sprite = Sprite3D::create(fileName); sprite->setScale(4); sprite->setRotation3D(Vec3(0,p.y-60) ); auto animation = Animation3D::create(fileName); if (animation) { auto animate = Animate3D::create(animation); sprite->runAction(RepeatForever::create(animate)); } _sprite = sprite; _curSkin[SkinType::UPPER_BODY] = "Girl_UpperBody01"; _curSkin[SkinType::PANTS] = "Girl_LowerBody01"; _curSkin[SkinType::SHOES] = "Girl_Shoes01"; _curSkin[SkinType::HAIR] = "Girl_Hair01"; _curSkin[SkinType::FACE] = "Girl_Face01"; _curSkin[SkinType::HAND] = "Girl_Hand01"; _curSkin[SkinType::GLASSES] = ""; //利用curSkin经过遍历来设置女郎的默认服装 applyCurSkin(); } void Sprite3DReskinTest::applyCurSkin() { //函数getMeshCount获取动画所有零件数目 for (ssize_t i = 0; i < _sprite->getMeshCount(); i++) { auto mesh = _sprite->getMeshByIndex(static_cast<int>(i)); bool isVisible = false; for (auto& it : _curSkin) { if (mesh->getName() == it.second) { isVisible = true; break; } } //通过索引来获取零件并设置可见性 _sprite->getMeshByIndex(static_cast<int>(i))->setVisible(isVisible); } } void Sprite3DReskinTest::menuCallback_switchHair(Ref* sender) { std::string str = _curSkin[SkinType::HAIR]; if (str == "Girl_Hair01") _curSkin[SkinType::HAIR] = "Girl_Hair02"; else _curSkin[SkinType::HAIR] = "Girl_Hair01"; applyCurSkin(); }最后通过点击回调换掉头发图片并调用applyCurSkin函数来实现换装
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |