cocos2d-x 单色精灵
来源:互联网 发布:跳跃网络怎么样 编辑:程序博客网 时间:2024/04/28 06:54
说说我自己想出的获取一个精灵对应的单色精灵的方法(将一个精灵中不透明部分的颜色全部变成单一颜色,单色精灵这个名字我自己随便取的)
方法一 RenderTexture
Sprite *getMonoColorSprite(Sprite *sprite){auto size = sprite->getContentSize();auto anchorPoint = sprite->getAnchorPoint();auto position = sprite->getPosition();auto center = Vec2(size.width / 2, size.height / 2);//如果直接用sprite,renderTexture上下是反的//有时sprite的锚点和位置变了,renderTexture里的纹理是空的//所以创建一个临时的上下翻转的精灵auto temp = Sprite::createWithTexture(sprite->getTexture(), sprite->getTextureRect());temp->setPosition(center);temp->setFlippedY(true);auto mask = LayerColor::create(Color4B::WHITE, size.width, size.height);mask->setBlendFunc({ GL_DST_ALPHA, GL_ZERO });auto renderTexture = RenderTexture::create(size.width, size.height);renderTexture->setAnchorPoint(Vec2::ZERO);renderTexture->setPosition(Vec2::ZERO);renderTexture->begin();temp->visit();mask->visit();renderTexture->end();//用renderTexture里的纹理创建要返回的精灵auto tex = renderTexture->getSprite()->getTexture();auto spr = Sprite::createWithTexture(tex);//恢复到与sprite相同的锚点和位置spr->setAnchorPoint(anchorPoint);spr->setPosition(position);return spr;}上面的函数返回了一个白色的精灵,然后用setColor可以设置颜色,测试代码如下
auto sprite = Sprite::create("grossini.png");sprite->setPosition(100, 200);auto mono = getMonoColorSprite(sprite);mono->setColor(Color3B::GREEN);mono->setPosition(300, 200);addChild(sprite);addChild(mono);
有点像数字图像处理中的图像二值化,不过这里这有一种颜色
使用RenderTexture效率低下,而且要占用额外空间,图片多的话,可能会多占很多空间,这种方法不太实用,推荐使用下面的Shader实现
方法二 Shader
fsh文件如下
#ifdef GL_ESprecision lowp float;#endif varying vec4 v_fragmentColor;varying vec2 v_texCoord;void main(){vec4 texColor = texture2D(CC_Texture0, v_texCoord);<span style="white-space:pre"></span>//最终颜色完全由顶点颜色决定gl_FragColor=v_fragmentColor;gl_FragColor.a*=texColor.a;}
使用方法
//可以在游戏初始化加载Shader,并添加到<span style="font-family: Arial, Helvetica, sans-serif;">ShaderCache中,方便以后调用</span>auto fragmentSource = FileUtils::getInstance()->getStringFromFile("monocolor.fsh");auto shader_program = GLProgram::createWithByteArrays(ccPositionTextureColor_noMVP_vert, fragmentSource.c_str());ShaderCache::getInstance()->addGLProgram(shader_program, "monocolor");
//应用使用Shadersprite->setGLProgram(ShaderCache::getInstance()->getGLProgram("monocolor"));
用Shader实现的代码少而且效率高,推荐使用
0 0
- cocos2d-x 单色精灵
- cocos2d-x(精灵类)
- cocos2d-x创建精灵
- Cocos2d-x精灵创建
- Cocos2d-x 精灵贴图
- Cocos2d-x 精灵移动
- cocos2d-x创建精灵
- cocos2d-x之精灵
- cocos2d-x中的精灵
- Cocos2d-X的精灵
- Cocos2d-X----精灵
- Cocos2d-x中的精灵
- cocos2d-x 精灵 Sprite
- cocos2d-x中的精灵
- cocos2d-x 创建精灵
- Cocos2d-x中的精灵
- cocos2d-x Touch 移动精灵
- Cocos2d-X 精灵、动作效果
- Python version 2.7 required, which was not found in the registry
- java nio(三)SocketChannel和ServerSocketChannel
- 同步工具介绍(Dropbox、SugarSync、Syncplicity、Live Mesh、Ubuntu One )
- Linux 读取文本常用命令
- 主要由javascript实现的网页打字小游戏
- cocos2d-x 单色精灵
- hdu 3622 Bomb Game(2-SAT 二分)
- mkl相关介绍
- learn python the hard way 读书笔记(1)
- 人生不如意十之八九,但是那一二就是我们继续坚持下去的动力。
- 小胖的水果
- 欢迎使用CSDN-markdown编辑器
- LeetCode_Symmetric Tree
- 01-02 数据科学家如何获取帮助