cocos creator 1.x透明渐变效果实现
时间:2022-07-22
本文章向大家介绍cocos creator 1.x透明渐变效果实现,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
先来一个效果图:
再来一个带背景的:
代码如下,写的粗糙,有问题还请指出:
public static TRANSFER_VERT:string = `
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;
}
`;
public static TRANSFER_FRAG:string = `
#ifdef GL_ES
precision lowp float;
#endif
uniform float time;
varying vec4 v_fragmentColor;
varying vec2 v_texCoord;
void main()
{
vec4 c = v_fragmentColor * texture2D(CC_Texture0, v_texCoord);
gl_FragColor = c;
float temp = v_texCoord.x - time;
if (temp <= 0.0) {
float temp2 = abs(temp);
if (temp2 <= 0.2) {
gl_FragColor.w = 1.0 - temp2/0.2;
} else {
gl_FragColor.w = 0.0;
}
} else {
gl_FragColor.w = 1.0;
}
}
`;
private _program:any;
private _time:number = 0;
start () {
this.testShader();
}
testShader() {
let bgSp:cc.Sprite = this.bgNode.getChildByName("bg").getComponent(cc.Sprite);
this._program = new cc.GLProgram();
if (cc.sys.isNative) {
this._program.initWithString(StoryHandlerScript.TRANSFER_VERT, StoryHandlerScript.TRANSFER_FRAG);
} else {
this._program.initWithVertexShaderByteArray(StoryHandlerScript.TRANSFER_VERT, StoryHandlerScript.TRANSFER_FRAG);
this._program.addAttribute(cc.macro.ATTRIBUTE_NAME_POSITION, cc.macro.VERTEX_ATTRIB_POSITION);
this._program.addAttribute(cc.macro.ATTRIBUTE_NAME_COLOR, cc.macro.VERTEX_ATTRIB_COLOR);
this._program.addAttribute(cc.macro.ATTRIBUTE_NAME_TEX_COORD, cc.macro.VERTEX_ATTRIB_TEX_COORDS);
}
this._program.link();
this._program.updateUniforms();
this._program.use();
if (cc.sys.isNative) {
var glProgram_state = cc.GLProgramState.getOrCreateWithGLProgram(this._program);
glProgram_state.setUniformFloat( "time", this._time );
} else {
let time = this._program.getUniformLocationForName("time");
this._program.setUniformLocationWith1f(time, this._time);
}
bgSp._sgNode.setShaderProgram(this._program);
}
update(dt){
this._time += 0.02;
if (this._program) {
this._program.use();
if (cc.sys.isNative) {
var glProgram_state = cc.GLProgramState.getOrCreateWithGLProgram(this._program);
glProgram_state.setUniformFloat( "time", this._time );
} else {
let time = this._program.getUniformLocationForName("time");
this._program.setUniformLocationWith1f(time, this._time);
}
}
}
以上就是全部代码。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Android处理视图圆角和色彩的工具类
- Flutter之Timer实现短信验证码获取60s倒计时功能的代码
- Android仿优酷视频的悬浮窗播放效果
- Android 本地广播和强制下线功能的实现代码
- Android实现强制下线功能的示例代码
- 如何用HMS Nearby Service给自己的App添加近距离数据传输功能
- Android自定义控件之圆形进度条动画
- Android 使用 Scroller 实现平滑滚动功能的示例代码
- Android文件操作工具类详解
- Android之RecycleView实现指定范围的拖动效果
- Android 通过代码安装 APK的方法详解
- Android ListView实现无限循环滚动
- ignite:一个漂亮的多用户SS/SSR面板
- FreshRSS:开源免费的RSS阅读器
- 使用snap快速安装RocketChat你的聊天服务器