cocos2d-x 3.8.1 Widget 置灰的实现
来源:互联网 发布:php培训机构达内教育 编辑:程序博客网 时间:2024/04/25 15:47
首先我这里说明一下,因为我们的ui大部分是用CocosStudio做的,所以这里针对的对象基本是都是Widget的子类对象。这里实现有两种方式
第一方式就是直接利用引擎提供的现有的内容来实现。以下两个方法可以实现将Widget置灰,以及从置灰还原原色
//将节点置灰
void addNodeGray(cocos2d::ui::Widget* node){
do{
CC_BREAK_IF(node==nullptr);
const char* key=GLProgram::SHADER_NAME_POSITION_GRAYSCALE;
GLProgram* gLProgram=GLProgramCache::getInstance()->getGLProgram(key);
auto scale9Sprite=dynamic_cast<Scale9Sprite*>(node->getVirtualRenderer());
if(scale9Sprite!=nullptr){
auto sprite=scale9Sprite->getSprite();
if(sprite!=nullptr){
sprite->setGLProgram(gLProgram);
}else{
scale9Sprite->setGLProgram(gLProgram);
}
}
}while (0);
}
//将节点从灰色恢复正常颜色
void removeNodeGray(cocos2d::ui::Widget* node){
do{
CC_BREAK_IF(node==nullptr);
const char* key=GLProgram::SHADER_NAME_POSITION_TEXTURE_COLOR_NO_MVP;
auto glprogramstate = GLProgramState::getOrCreateWithGLProgramName(key);
auto scale9Sprite=dynamic_cast<Scale9Sprite*>(node->getVirtualRenderer());
if(scale9Sprite!=nullptr){
auto sprite=scale9Sprite->getSprite();
if(sprite!=nullptr){
sprite->setGLProgramState(glprogramstate);
}else{
scale9Sprite->setGLProgramState(glprogramstate);
}
}
}while (0);
}
第二种方式:则是自己提供两个文件gray.fsh和gray.vsh,这两个文件放在项目的Resources目录下
gray.fsh的内容
varying vec4 v_fragmentColor;
varying vec2 v_texCoord;
void main()
{
vec4 v_orColor = v_fragmentColor * texture2D(CC_Texture0, v_texCoord);
float gray = dot(v_orColor.rgb, vec3(0.299, 0.587, 0.114));
gl_FragColor = vec4(gray, gray, gray, v_orColor.a);
}
gray.vsh的内容
attribute vec4 a_position;
attribute vec2 a_texCoord;
attribute vec4 a_color;
varying vec4 v_fragmentColor;
varying vec2 v_texCoord;
void main()
{
gl_Position = CC_PMatrix * a_position;
v_fragmentColor = a_color;
v_texCoord = a_texCoord;
}
--------------------------------------------------------------------------------这里是分割线---------------------------------------------------------------------------------------------
//将节点置灰
void addNodeGray(cocos2d::ui::Widget* node){
do{
CC_BREAK_IF(node==nullptr);
GLProgram* gLProgram=GLProgramCache::getInstance()->getGLProgram("black_white");
if(gLProgram==nullptr){
gLProgram = GLProgram::createWithFilenames("gray.vsh", "gray.fsh");
GLProgramCache::getInstance()->addGLProgram(gLProgram,"black_white");
}
auto scale9Sprite=dynamic_cast<Scale9Sprite*>(node->getVirtualRenderer());
if(scale9Sprite!=nullptr){
auto sprite=scale9Sprite->getSprite();
if(sprite!=nullptr){
sprite->setGLProgram(gLProgram);
}else{
scale9Sprite->setGLProgram(gLProgram);
}
}
}while (0);
}
//将节点从灰恢复正常颜色
void removeNodeGray(cocos2d::ui::Widget* node){
do{
CC_BREAK_IF(node==nullptr);
auto glprogramstate = GLProgramState::getOrCreateWithGLProgramName(GLProgram::SHADER_NAME_POSITION_TEXTURE_COLOR_NO_MVP);
auto scale9Sprite=dynamic_cast<Scale9Sprite*>(node->getVirtualRenderer());
if(scale9Sprite!=nullptr){
auto sprite=scale9Sprite->getSprite();
if(sprite!=nullptr){
sprite->setGLProgramState(glprogramstate);
}else{
scale9Sprite->setGLProgramState(glprogramstate);
}
}
}while (0);
}
- cocos2d-x 3.8.1 Widget 置灰的实现
- Cocos2d-x实现灰蒙效果
- Cocos2D-X shader(五) cocostudio导出界面置灰及复原lua实现版
- Cocos2d-x使用CCGLProgram和Shader文件实现精灵置灰
- cocos2d-x一个函数实现精灵变灰效果
- cocos2d-x 精灵变灰
- cocos2d-x 图片变灰
- Cocos2d-x 让精灵图像变灰的方法
- cocos2d-x,Shader的用法:精灵变灰
- 主题 : 在cocos2d/cocos2d-x中,一种简单的将sprite变灰的方法
- Cocos2d-x 精灵变灰效果
- cocos2d-x图片变灰或者变亮
- Cocos2d-x中让CCSprite变灰(Gray)的简单办法
- Cocos2d-x中让CCSprite变灰(Gray)的简单办法
- Quick-Cocos2d-x 3.2将对象(包括子对象)变灰的方法
- Cocos2d-x开发系列 从一个图片灰态需求开始我的博客之旅
- cocos2d-x 进度条的实现
- cocos2d-x进度条的实现
- 详解移动端的Touch事件
- UIScrollView的frame,contentSize,contentOffset,contentInset属性
- Lytro的教训:曾经的光场神器为何不行了?
- Netty是什么?
- iOS 两个app之间的跳转
- cocos2d-x 3.8.1 Widget 置灰的实现
- XCode工程中 Project 和 Targets区别
- 在对话框中显示bmp图片
- Spring3.x中各个jar包的作用总结
- 这些 iOS 面试基础题目,你都深入了解吗?
- JavaScript__JavaScript中的匿名函数及函数的闭包
- innerHTML
- 如何检测硬盘坏道
- 搭建pcduino交叉编译环境