cocos2dx-3.x spine换装

本文介绍了Cocos2d-x中使用Spine进行骨骼动画的节点类`SpineNode`,扩展了翻转轴的功能,并实现了更换皮肤部件的功能。`SpineNode`提供了创建方法,包括从数据指针和文件路径创建。新增的`isFlippedX`、`setFlippedX`、`isFlippedY`和`setFlippedY`用于处理轴翻转,而`replacementParts`方法则允许更换皮肤部件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

SpineNode.cpp文件


#include "SpineNode.h"

#include "SpineUtils.h"
using namespace cocos2d;


static Vector<Texture2D*>*  _displayTexs = nullptr;


struct _Entry
{
    int slotIndex;
    const char* name;
    spAttachment* attachment;
    _Entry* next;
};


typedef struct
{
    spSkin super;
    _Entry* entries;
} _spSkin;


SpineNode::SpineNode(spSkeletonData* skeletonData)
: SkeletonAnimation(skeletonData)
{
    
}


SpineNode::SpineNode(const std::string& skeletonDataFile, spAtlas* atlas, float scale)
: SkeletonAnimation(skeletonDataFile, atlas, scale)
{
    
}


SpineNode::SpineNode(const std::string& skeletonDataFile, const std::string& atlasFile, float scale)
: SkeletonAnimation(skeletonDataFile, atlasFile, scale)
{
    
}


SpineNode* SpineNode::createWithData(spSkeletonData* skeletonData)
{
    SpineNode* node = new SpineNode(skeletonData);
    node->autorelease();
    return node;
}


SpineNode* SpineNode::createWithFile(const std::string& skeletonDataFile, spAtlas* atlas, float scale)
{
    SpineNode* node = new SpineNode(skeletonDataFile, atlas, scale);
    node->autorelease();
    return node;
}


SpineNode* SpineNode::createWithFile(const std::string& skeletonDataFile, const std::string& atlasFile, float scale)
{
    SpineNode* node = new SpineNode(skeletonDataFile, atlasFile, scale);
    node->autorelease();
    return node;
}


bool SpineNode::isFlippedX() const
{
    return _skeleton->flipX != 0;
}


void SpineNode::setFlippedX(bool flippedX)
{
    _skeleton->flipX = flippedX ? 1 : 0;
}


bool SpineNode::isFlippedY() const
{
    return _skeleton->flipY != 0;
}


void SpineNode::setFlippedY(bool flippedY)
{
    _skeleton->flipY = flippedY ? 1 : 0;
}


bool SpineNode::replacementParts(const std::string& skinName, const std::string& attachmentName)
{
    CCLOG("in replacementParts 0");
    if (skinName.empty())
    {
        return false;
    }
    CCLOG("in replacementParts 1");
    spSkin *skin = spSkeletonData_findSkin(_skeleton->data, skinName.c_str());
    if (!skin) return false;
    CCLOG("in replacementParts 2");
    if (_skeleton->skin)
    {
        const _Entry *entry = reinterpret_cast<_spSkin *>(_sk
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值