骨骼动画中为每个骨骼设置单独的颜色

骨骼动画中为每个骨骼设置单独的颜色

最近在做一款颜色类的游戏,用到了骨骼动画,但是,不同的骨骼需要有不同的颜色。在cocos的Node中,有一个setColor的方法可以设置颜色,但是,cocos中设置颜色,每个节点会得到父节点的颜色,并跟父节点的颜色保持一致。也就是说,在不改动cocos源码的情况下,这个需求无法实现(也可能是我没找对方法)。所以,在这里我修改了cocos中Node的源码,让Node能够单独设置自己的颜色。
.h中做的修改

public:
        CC_SYNTHESIZE(bool,_isUpdataColorByParent,IsUpdataColorByParent);
        Color3B _selfColor = Color3B::WHITE;

修改的.cpp中的方法

void Node::setColor(const Color3B& color)
{
    _displayedColor = _realColor = color;
    /*设置_selfColor*/
    _selfColor = color;
    updateCascadeColor();
}
void Node::updateCascadeColor()
{
    Color3B parentColor = Color3B::WHITE;
    if (_parent && _parent->isCascadeColorEnabled())
    {
        parentColor = _parent->getDisplayedColor();
    }
    /*判断是否跟父节点的颜色保持一致*/
    if (_isUpdataColorByParent == false)
    {
        parentColor = _selfColor;
    }

    updateDisplayedColor(parentColor);
}

使用

void HelloWorld::testBone()
{
    Size visibleSize = Director::getInstance()->getVisibleSize();
    ArmatureDataManager::getInstance()->addArmatureFileInfo("BoneTest0.png", "BoneTest0.plist", "BoneTest.ExportJson");
    Armature*pArm = Armature::create("BoneTest");
    pArm->getAnimation()->play("circle_4");
    addChild(pArm);
    pArm->setPosition(Vec2(visibleSize.width / 2, visibleSize.height / 2));
    Bone * pBone1 = pArm->getBone("circle_lt");
    Bone * pBone2 = pArm->getBone("circle_lb");
    Bone * pBone3 = pArm->getBone("circle_rt");
    Bone * pBone4 = pArm->getBone("circle_rb");
    pBone1->setCascadeColorEnabled(true);//打开颜色设置开关
    pBone1->setCascadeOpacityEnabled(true);//打开透明度设置开关
    pBone2->setCascadeColorEnabled(true);
    pBone2->setCascadeOpacityEnabled(true);
    pBone3->setCascadeColorEnabled(true);
    pBone3->setCascadeOpacityEnabled(true);
    pBone4->setCascadeColorEnabled(true);
    pBone4->setCascadeOpacityEnabled(true);
    pBone1->setIsUpdataColorByParent(false);//设置不根据父节点的颜色更新颜色
    pBone2->setIsUpdataColorByParent(false);
    pBone3->setIsUpdataColorByParent(false);
    pBone4->setIsUpdataColorByParent(false);
    pArm->setCascadeColorEnabled(true);
    pArm->setCascadeOpacityEnabled(true);
    /*为骨骼设置颜色*/
    pBone1->setColor(Color3B(255, 255, 0));
    pBone2->setColor(Color3B(0, 255, 0));
    pBone3->setColor(Color3B(255, 0, 0));
    pBone4->setColor(Color3B(0, 255, 0));
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值