加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Cocos2d-x结构学习(十七)CCSkeletonAnimation、CCSkeleton、An

发布时间:2020-12-14 20:44:18 所属栏目:百科 来源:网络整理
导读:1、CCSkeletonAnimation:继承自CCSkeleton,骨骼动画类 class CC_EX_DLL CCSkeletonAnimation: public CCSkeleton {public:std::vectorAnimationState* states; //状态容器static CCSkeletonAnimation* createWithData (SkeletonData* skeletonData); //相

1、CCSkeletonAnimation:继承自CCSkeleton,骨骼动画类

class CC_EX_DLL CCSkeletonAnimation: public CCSkeleton {
public:
	std::vector<AnimationState*> states;     //状态容器

	static CCSkeletonAnimation* createWithData (SkeletonData* skeletonData);           //相关创建函数
	static CCSkeletonAnimation* createWithFile (const char* skeletonDataFile,Atlas* atlas,float scale = 1);
	static CCSkeletonAnimation* createWithFile (const char* skeletonDataFile,const char* atlasFile,float scale = 1);

	CCSkeletonAnimation (SkeletonData* skeletonData);
	CCSkeletonAnimation (const char* skeletonDataFile,float scale = 1);
	CCSkeletonAnimation (const char* skeletonDataFile,float scale = 1);

	virtual ~CCSkeletonAnimation ();

	virtual void update (float deltaTime);

	void addAnimationState (AnimationStateData* stateData = 0);                                      //两个添加状态函数
	void setAnimationStateData (AnimationStateData* stateData,int stateIndex = 0);
	void setMix (const char* fromAnimation,const char* toAnimation,float duration,int stateIndex = 0);
	void setAnimation (const char* name,bool loop,int stateIndex = 0);                                 //设置动画
	void addAnimation (const char* name,float delay = 0,int stateIndex = 0);              //添加
	void clearAnimation (int stateIndex = 0);                                                    //清除

protected:
	CCSkeletonAnimation ();
private:
	typedef CCSkeleton super;
	std::vector<AnimationStateData*> stateDatas;
	void initialize ();
};
2、CCSkeleton:继承自CCNodeRGBA和CCBlendProtocol,骨骼处理类
class CC_EX_DLL CCSkeleton: public cocos2d::CCNodeRGBA,public cocos2d::CCBlendProtocol {
public:
	Skeleton* skeleton;
	Bone* rootBone;
	float timeScale;
	bool debugSlots;
	bool debugBones;
	bool premultipliedAlpha;

	static CCSkeleton* createWithData (SkeletonData* skeletonData,bool ownsSkeletonData = false);
	static CCSkeleton* createWithFile (const char* skeletonDataFile,float scale = 1);
	static CCSkeleton* createWithFile (const char* skeletonDataFile,float scale = 1);

	CCSkeleton (SkeletonData* skeletonData,bool ownsSkeletonData = false);
	CCSkeleton (const char* skeletonDataFile,float scale = 1);
	CCSkeleton (const char* skeletonDataFile,float scale = 1);

	virtual ~CCSkeleton ();

	virtual void update (float deltaTime);                 //更新
	virtual void draw ();                               //绘制
	virtual cocos2d::CCRect boundingBox ();               //获得包围体

	void updateWorldTransform ();                           //更新世界变换

	void setToSetupPose ();
	void setBonesToSetupPose ();
	void setSlotsToSetupPose ();

	Bone* findBone (const char* boneName) const;            //查找骨骼
	Slot* findSlot (const char* slotName) const;

	bool setSkin (const char* skinName);                      //设置皮肤
	
	Attachment* getAttachment (const char* slotName,const char* attachmentName) const;
	bool setAttachment (const char* slotName,const char* attachmentName);

	CC_PROPERTY(cocos2d::ccBlendFunc,blendFunc,BlendFunc);
	virtual void setOpacityModifyRGB (bool value);
	virtual bool isOpacityModifyRGB ();
protected:
	CCSkeleton ();
	void setSkeletonData (SkeletonData* skeletonData,bool ownsSkeletonData);
	cocos2d::CCTextureAtlas* getTextureAtlas (RegionAttachment* regionAttachment) const;
private:
	bool ownsSkeletonData;
	Atlas* atlas;
	void initialize ();
};
3、AnimationState:动画状态结构体
typedef struct {
	AnimationStateData* const data;
	Animation* const animation;
	float time;
	int/*bool*/loop;
} AnimationState;
4、AnimationStateData:动画数据结构体
typedef struct {
	SkeletonData* const skeletonData;
	const void* const entries;
} AnimationStateData;
5、SkeletonData:骨骼数据结构体
typedef struct {
	int boneCount;
	BoneData** bones;

	int slotCount;
	SlotData** slots;

	int skinCount;
	Skin** skins;
	Skin* defaultSkin;

	int animationCount;
	Animation** animations;
} SkeletonData;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读