cocos2d-X 节点(CCArmature.h)API

本文主要介绍了cocos2d-X中的CCArmature节点API,讲解如何设置动画和管理bone,适合cocos2d-X开发者参考学习。

本文来自http://blog.csdn.net/runaying ,引用必须注明出处!

cocos2d-X 节点(CCArmature.h)API

温馨提醒:为了大家能更好学习,强烈推荐大家看看本人的这篇博客 Cocos2d-X权威指南笔记

设置 动画,管理 bone

// 设置 动画,管理 bone


#ifndef __CCARMATURE_H__
#define __CCARMATURE_H__

#include "utils/CCArmatureDefine.h"
#include "CCBone.h"
#include "display/CCBatchNode.h"
#include "animation/CCArmatureAnimation.h"
#include "utils/CCSpriteFrameCacheHelper.h"
#include "utils/CCArmatureDataManager.h"

class b2Body;
struct cpBody;

NS_CC_EXT_ARMATURE_BEGIN

CC_DEPRECATED_ATTRIBUTE typedef ProcessBase CCProcessBase;
CC_DEPRECATED_ATTRIBUTE typedef BaseData CCBaseData;
CC_DEPRECATED_ATTRIBUTE typedef DisplayData CCDisplayData;
CC_DEPRECATED_ATTRIBUTE typedef SpriteDisplayData CCSpriteDisplayData;
CC_DEPRECATED_ATTRIBUTE typedef ArmatureDisplayData CCArmatureDisplayData;
CC_DEPRECATED_ATTRIBUTE typedef ParticleDisplayData CCParticleDisplayData;
CC_DEPRECATED_ATTRIBUTE typedef BoneData CCBoneData;
CC_DEPRECATED_ATTRIBUTE typedef FrameData CCFrameData;
CC_DEPRECATED_ATTRIBUTE typedef MovementBoneData CCMovementBoneData;
CC_DEPRECATED_ATTRIBUTE typedef MovementData CCMovementData;
CC_DEPRECATED_ATTRIBUTE typedef AnimationData CCAnimationData;
CC_DEPRECATED_ATTRIBUTE typedef ContourData CCContourData;
CC_DEPRECATED_ATTRIBUTE typedef TextureData CCTextureData;
CC_DEPRECATED_ATTRIBUTE typedef DecorativeDisplay CCDecorativeDisplay;
CC_DEPRECATED_ATTRIBUTE typedef DisplayData CCDisplayData;
CC_DEPRECATED_ATTRIBUTE typedef DisplayFactory CCDisplayFactory;
CC_DEPRECATED_ATTRIBUTE typedef BatchNode CCBatchNode;
CC_DEPRECATED_ATTRIBUTE typedef DecorativeDisplay CCDecorativeDisplay;
CC_DEPRECATED_ATTRIBUTE typedef DisplayManager CCDisplayManager;
CC_DEPRECATED_ATTRIBUTE typedef ColliderBody CCColliderBody;
CC_DEPRECATED_ATTRIBUTE typedef ColliderDetector CCColliderDetector;
CC_DEPRECATED_ATTRIBUTE typedef SpriteFrameCacheHelper CCSpriteFrameCacheHelper;
CC_DEPRECATED_ATTRIBUTE typedef TweenFunction CCTweenFunction;
CC_DEPRECATED_ATTRIBUTE typedef ArmatureData CCArmatureData;
CC_DEPRECATED_ATTRIBUTE typedef Bone CCBone;
CC_DEPRECATED_ATTRIBUTE typedef ArmatureAnimation CCArmatureAnimation;
CC_DEPRECATED_ATTRIBUTE typedef Armature CCArmature;
CC_DEPRECATED_ATTRIBUTE typedef ArmatureDataManager CCArmatureDataManager;

class  Armature : public NodeRGBA, public BlendProtocol
{

public:

    /**
    * 分配并初始化一个 armature (衔铁).
    * @return 一个初始化的被标记为自动释放的 armature (衔铁)
    */
    static Armature *create();

    /**
    * 分配一个 armature (衔铁) 并使用 ArmatureDataManager 里面的名为 ArmatureData 的数据来初始化  armature (衔铁)
    *
    * @param  name  armature (衔铁)将使用这个名称查找 ArmatureData 来初始化它
    * @return 一个初始化的被标记为自动释放的 armature (衔铁)
    */
    static Armature *create(const char *name);

    static Armature *create(const char *name, Bone *parentBone);

public:
    Armature();
    /**
     * @js NA
     * @lua NA
     */
    ~Armature(void);

    /**
     * 初始化一个空的 armature (衔铁)
     */
    virtual bool init();

    /**
     * 使用制定的 name 初始化一个 armature (衔铁)
     * @param name Armature name
     */
    virtual bool init(const char *name);

    virtual bool init(const char *name, Bone *parentBone);
    /**
     * Add a Bone to this Armature,
     *
     * @param bone  你希望添加到 armature (衔铁) 的 Bone(骨架)
     * @param parentName   你希望添加到的 parent Bone's 名字 . 如果它是 NULL, 那么就把 armature (衔铁)设置为他的 parent
     */
    virtual void addBone(Bone *bone, const char *parentName);
    /**
     * Get 指定名称对应的 bone
     *
     * @param name 你希望得到 bone's 名字
     */
    virtual Bone *getBone(const char *name) const;
    /**
     * 使用指定的 parent 名字 改变 bone's 的 parent 
     *
     * @param bone 你希望改变 parent 的 bone 
     * @param parentName 新的 parent's 名字
     */
    virtual void changeBoneParent(Bone *bone, const char *parentName);
    /**
     * 移除指定名字对应的 bone. 如果递归,它也将递归删除它的 child Bone.
     *
     * @param bone 你希望移除的 bone 
     * @param recursion 判断是否递归删除 bone's child
     */
    virtual void removeBone(Bone *bone, bool recursion);

    /**
     * Get Armature's bone 字典       // 衔铁
     * @return Armature's bone dictionary
     */
    Dictionary *getBoneDic();

    /**
     * 这个 boundingBox 每一次都将计算所有的 bones' boundingBox 
     */
    virtual Rect getBoundingBox() const;

    Bone *getBoneAtPoint(float x, float y);

    // overrides
    /**
     * @js NA
     * @lua NA
     */
    virtual void visit() override;
    virtual void update(float dt) override;
    virtual void draw() override;

    virtual const AffineTransform& getNodeToParentTransform() const override;

    inline void setBlendFunc(const BlendFunc &blendFunc) override { _blendFunc = blendFunc; }
    inline const BlendFunc &getBlendFunc(void) const override{ return _blendFunc; }
	

    /**
     * 设置 contentsize 并计算锚点
     */
    virtual void updateOffsetPoint();

    virtual void setAnimation(ArmatureAnimation *animation);
    virtual ArmatureAnimation *getAnimation();
    
    virtual bool getArmatureTransformDirty();

#if ENABLE_PHYSICS_BOX2D_DETECT
    virtual b2Fixture *getShapeList();
#elif ENABLE_PHYSICS_CHIPMUNK_DETECT
    virtual cpShape *getShapeList();
#endif

protected:

    /*
     * 用来创建内部的 Bone 
     */
    Bone *createBone(const char *boneName );

    //! 更新混合功能
    void updateBlendType(BlendType blendType);

    CC_SYNTHESIZE(ArmatureData *, _armatureData, ArmatureData);

    CC_SYNTHESIZE(BatchNode *, _batchNode, BatchNode);

    CC_SYNTHESIZE(std::string, _name, Name);

    CC_SYNTHESIZE(TextureAtlas *, _atlas, TextureAtlas);

    CC_SYNTHESIZE(Bone *, _parentBone, ParentBone);

    CC_SYNTHESIZE(float, _version, Version);

protected:
    mutable bool _armatureTransformDirty;

    Dictionary *_boneDic;                    //!  bones 字典,  包括所有 armature (衔铁)的 bones, 无论他是直接的 bone or 间接的 bone. I它和 m_pChindren 是不同的.

    Array *_topBoneList;

    BlendFunc _blendFunc;                    //! 它需要继承 CCTextureProtocol

    Point _offsetPoint;

    ArmatureAnimation *_animation;

#if ENABLE_PHYSICS_BOX2D_DETECT
    CC_PROPERTY(b2Body *, _body, Body);
#elif ENABLE_PHYSICS_CHIPMUNK_DETECT
    CC_PROPERTY(cpBody *, _body, Body);
#endif
};

NS_CC_EXT_ARMATURE_END

#endif /*__CCARMATURE_H__*/


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值