DrawNode : solid Rectangle : CHANGE COLOR?

for FadeIn, FadeOut => custom setOpacity
for change color => custom setColor (but you will change all shape draw by DrawNode to the same color (new color).

For example I custom DrawNode with MyDrawNode

MyDrawNode.h

#include "cocos2d.h"

class MyDrawNode : public cocos2d::DrawNode
{
public:
    
    static MyDrawNode* create();
    void setOpacity(GLubyte opacity) override;
    void setColor(const cocos2d::Color3B &color) override;
};

MyDrawNode.cpp

#include "MyDrawNode.h"

MyDrawNode* MyDrawNode::create()
{
    MyDrawNode* ret = new (std::nothrow)MyDrawNode();
    if (ret && ret->init())
    {
        ret->autorelease();
    }
    else
    {
        CC_SAFE_FREE(ret);
        
    }
    return ret;

}

void MyDrawNode::setOpacity(GLubyte opacity)
{
    DrawNode::setOpacity(opacity);
    
    for (int i = 0; i < _bufferCount; i++)
    {
        _buffer[i].colors.a = opacity;
    }
    
    _dirty = true;
}

void MyDrawNode::setColor(const cocos2d::Color3B &color)
{
    DrawNode::setColor(color);
    
    for (int i = 0; i < _bufferCount; i++)
    {
        _buffer[i].colors.r = color.r;
        _buffer[i].colors.g = color.g;
        _buffer[i].colors.b = color.b;
    }
    
    _dirty = true;
    
}

Using…

MyDrawNode* draw = MyDrawNode::create();
draw->drawSolidCircle(Point(s.width/2, s.height/2), 200, 0, 32, Color4F(1, 0, 0, 1));

//// change Opacity...
//    draw->setOpacity(100);
draw->runAction(FadeOut::create(5));

//// change color...
//draw->setColor(Color3B::BLUE);    
draw->runAction(TintTo::create(1, Color3B::BLUE));

...
addChild(draw);
...
4 Likes