您的位置:首页 > 移动开发 > Cocos引擎

骨骼动画 cocos2d-x + cocoStudio <cocos2d-x : version 2.2.0>

2013-11-18 23:56 330 查看
cocos2d-x version 2.2.0

首先,在 HelloWorldScene.cpp 中的 init()函数中 添加如下代码 (资源文件可以直接到 cocos2d-x 中获取)

#include "CCArmature/utils/CCArmatureDataManager.h" //(头文件添加)

//! create a new thread to load data(异步加载)
/**
* @brief Add ArmatureFileInfo, it is managed by CCArmatureDataManager.
*   It will load data in a new thread
*  添加ArmatureFileInfo,它是由CCArmatureDataManager管理。 它将数据加载在一个新线程
*/

extension::CCArmatureDataManager::sharedArmatureDataManager()
->addArmatureFileInfoAsync("cyborg.png", "cyborg.plist", "cyborg.xml", this, NULL/*schedule_selector(TestArmatureNesting::close)*/);

CCLayer *pLayer = new TestArmatureNesting();
this->addChild(pLayer);


其次,TestArmatureNesting 类实现

//.h
class TestArmatureNesting : public cocos2d::CCLayer
{
public:
virtual void onEnter();
virtual void onExit();
virtual bool ccTouchBegan(cocos2d::CCTouch *pTouch, cocos2d::CCEvent *pEvent);
virtual void registerWithTouchDispatcher();

void close(float percent);

cocos2d::extension::CCArmature *armature;
int weaponIndex;
};

//.cpp
void TestArmatureNesting::onEnter()
{
CCLayer::onEnter();
setTouchEnabled(true);//触摸事件开启   与registerWithTouchDispatcher() 对应 

armature = cocos2d::extension::CCArmature::create("cyborg");
/** playByIndex()
* Play animation by index, the other param is the same to play.
* @param  _animationIndex  the animation index you want to play
*/
armature->getAnimation()->playByIndex(1);
armature->setPosition(ccp(200,200));
armature->setScale(1.2f);
armature->getAnimation()->setSpeedScale(0.4f);
addChild(armature);

weaponIndex = 0;
}

void TestArmatureNesting::onExit()
{
CCDirector::sharedDirector()->getTouchDispatcher()->removeDelegate(this);
CCLayer::onExit();
}

bool TestArmatureNesting::ccTouchBegan( CCTouch *pTouch, CCEvent *pEvent )
{
++weaponIndex;
weaponIndex = weaponIndex % 4;

/** virtual CCBone *getBone(const char *name) const;
* Get a bone with the specified name
*
* @param name The bone's name you want to get
*/
if(armature != NULL)
{
armature->getBone("armInside")->getChildArmature()->getAnimation()->playByIndex(weaponIndex);
armature->getBone("armOutside")->getChildArmature()->getAnimation()->playByIndex(weaponIndex);
}

return false;
}

//registerWithTouchDispatcher() 注册触摸事件(触摸事件)    -1>0  先触发
void TestArmatureNesting::registerWithTouchDispatcher()
{
CCDirector::sharedDirector()->getTouchDispatcher()->addTargetedDelegate(this, INT_MIN + 1, true);
}

void TestArmatureNesting::close(float percent)
{

}


点击屏幕 切换装备:(如图)









打开 .json 或者 .xml 文件我们会发现 一个动作的组成结构:

<mov name="fall" dr="5" to="6" drTW="5" lp="1" twE="NaN">
…… …… …… ……
</mov>
表示一个动作

这也就是 armature->getAnimation()->playByIndex(1); 这里的参数 1 的由来。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: