SpriteWithHue,通过修改色调实现资源复用

SpriteWithHue

这个类主要实现的功能是对cocos2d::Sprite色调的修改,从而达到一套纹理可以重复利用的目的,特别对于一些只需在颜色上换装的游戏来说,真是大大的福利。

这是我从https://github.com/alex314/CCSpriteWithHue扒过来,从Cocos2d-iphone移植到Cocos2d-x,并进行了适当的修改。

感谢原作者https://github.com/alex314。

实现的效果如图:

支持Sprite以及Animtion。使用的引擎版本是
Cocos2d-x v3.5 Final。

测试例如图:

使用方式很简单,和cocos2d::Sprite一样,只是多了一个setHue(float hue)接口用于设置色调,范围处于0~2π。

示例代码:

    auto alien = SpriteWithHue::create("alien.png");
    alien->setPosition(Vec2(100, 100));
    alien->setHue(M_PI);
    this->addChild(alien);

```


实现以及测试例在:

https://github.com/fusijie/SpriteWithHue

:2: 炸叼天

本部分内容设定了隐藏,需要回复后才能看到

1赞

这个方法挺不错的

看看,好像很厉害的样子

不错,很好用

看着还行,哈哈

看起来好像不错的样子。。。。。

不错不错!!!!

不错不错!!!!

呵呵,引擎继承可好

建议直接替换sprite类吧。不要再搞一个新类了:10:

本部分内容设定了隐藏,需要回复后才能看到:5:

mark!!!!!!!!!!!!!!!!!!

good job:2:

可以调成全灰色吗

我 3.6 版本 引擎 vs 2012 说编译不过去 .cpp 里的 162行 说不能mat 不能传递值
我改成了这样

void SpriteWithHue::matCallBack( GLProgram* glProgram, Uniform* uniform)
{
//glUniform4fv( uniform->location, (GLsizei)_matrixPaletteSize, (const float*)_matrixPalette );
glUniformMatrix3fv(uniform->location, 1, GL_FALSE, (GLfloat*)&mat);
}
void SpriteWithHue::updateColorMatrix()
{
//GLfloat mat;
hueMatrix(mat, _hue);
premultiplyAlpha(mat, getAlpha());

//auto callback = (cocos2d::GLProgram *p, cocos2d::Uniform *u)
//{
//  glUniformMatrix3fv(u->location, 1, GL_FALSE, (GLfloat*)&mat);
//};

getGLProgramState()->setUniformCallback("u_hue", CC_CALLBACK_2(SpriteWithHue::matCallBack, this));

}

把 mat 变成成员变量

然后我又把 文件绑定到lua 里面 lua 里面也是可以用的

不知道 还有什么别的好的写法没

暂时没有要加入引擎,所以用子类的方式。

gl弄的额额额额呃呃呃