├── .gitignore ├── LICENSE ├── assets ├── components.meta ├── components │ ├── ShaderHelper.ts │ ├── ShaderHelper.ts.meta │ ├── ShaderNameLabel.ts │ ├── ShaderNameLabel.ts.meta │ ├── ShaderTime.ts │ └── ShaderTime.ts.meta ├── resources.meta ├── resources │ ├── effects.meta │ └── effects │ │ ├── Blur.effect │ │ ├── Blur.effect.meta │ │ ├── CirclePortrait.effect │ │ ├── CirclePortrait.effect.meta │ │ ├── CirclePortrait_Base.effect │ │ ├── CirclePortrait_Base.effect.meta │ │ ├── Dissolve.effect │ │ ├── Dissolve.effect.meta │ │ ├── Fluxay.effect │ │ ├── Fluxay.effect.meta │ │ ├── Fluxay2.effect │ │ ├── Fluxay2.effect.meta │ │ ├── FluxaySuper.effect │ │ ├── FluxaySuper.effect.meta │ │ ├── Glowing.effect │ │ ├── Glowing.effect.meta │ │ ├── Mosaic.effect │ │ ├── Mosaic.effect.meta │ │ ├── Outline.effect │ │ ├── Outline.effect.meta │ │ ├── RadialBlur.effect │ │ ├── RadialBlur.effect.meta │ │ ├── Rain.effect │ │ ├── Rain.effect.meta │ │ ├── SearchLight.effect │ │ ├── SearchLight.effect.meta │ │ ├── Stone.effect │ │ ├── Stone.effect.meta │ │ ├── Water.effect │ │ └── Water.effect.meta ├── scene.meta ├── scene │ ├── test-shader-display.fire │ ├── test-shader-display.fire.meta │ ├── test-single.fire │ └── test-single.fire.meta ├── texutres.meta └── texutres │ ├── content.png │ ├── content.png.meta │ ├── image.jpg │ ├── image.jpg.meta │ ├── wcard.png │ └── wcard.png.meta ├── creator.d.ts ├── gzh.jpg ├── js ├── ShaderHelper.js ├── ShaderHelper.js.meta ├── ShaderNameLabel.js ├── ShaderNameLabel.js.meta ├── ShaderProperty.js ├── ShaderProperty.js.meta ├── ShaderTime.js └── ShaderTime.js.meta ├── jsconfig.json ├── project.json ├── readme.md ├── settings ├── builder.json ├── project.json └── services.json └── wxpay.jpg /.gitignore: -------------------------------------------------------------------------------- 1 | #///////////////////////////////////////////////////////////////////////////// 2 | # Fireball Projects 3 | #///////////////////////////////////////////////////////////////////////////// 4 | 5 | /library/ 6 | /temp/ 7 | /local/ 8 | /build/ 9 | 10 | #///////////////////////////////////////////////////////////////////////////// 11 | # npm files 12 | #///////////////////////////////////////////////////////////////////////////// 13 | 14 | npm-debug.log 15 | node_modules/ 16 | 17 | #///////////////////////////////////////////////////////////////////////////// 18 | # Logs and databases 19 | #///////////////////////////////////////////////////////////////////////////// 20 | 21 | *.log 22 | *.sql 23 | *.sqlite 24 | 25 | #///////////////////////////////////////////////////////////////////////////// 26 | # files for debugger 27 | #///////////////////////////////////////////////////////////////////////////// 28 | 29 | *.sln 30 | *.csproj 31 | *.pidb 32 | *.unityproj 33 | *.suo 34 | 35 | #///////////////////////////////////////////////////////////////////////////// 36 | # OS generated files 37 | #///////////////////////////////////////////////////////////////////////////// 38 | 39 | .DS_Store 40 | ehthumbs.db 41 | Thumbs.db 42 | 43 | #///////////////////////////////////////////////////////////////////////////// 44 | # WebStorm files 45 | #///////////////////////////////////////////////////////////////////////////// 46 | 47 | .idea/ 48 | 49 | #////////////////////////// 50 | # VS Code files 51 | #////////////////////////// 52 | 53 | .vscode/ 54 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 ShawnZhang2015 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /assets/components.meta: -------------------------------------------------------------------------------- 1 | { 2 | "ver": "1.0.1", 3 | "uuid": "165ba327-329b-4ad8-acba-2409ca965ec6", 4 | "isSubpackage": false, 5 | "subpackageName": "", 6 | "subMetas": {} 7 | } -------------------------------------------------------------------------------- /assets/components/ShaderHelper.ts: -------------------------------------------------------------------------------- 1 | const {ccclass, property, executeInEditMode} = cc._decorator; 2 | 3 | @ccclass('ShaderProperty') 4 | export class ShaderProperty { 5 | @property({readonly: true}) 6 | key = ''; 7 | 8 | @property(cc.Float) 9 | value = 0.0; 10 | }; 11 | 12 | const ShaderEnum = cc.Enum({}); 13 | 14 | @ccclass 15 | @executeInEditMode 16 | export default class ShaderHelper extends cc.Component { 17 | 18 | //枚举Shader程序 19 | @property 20 | _program = 0; 21 | @property({type:ShaderEnum}) 22 | get program() { 23 | return this._program; 24 | } 25 | set program(value) { 26 | if (this._program === value) { 27 | return; 28 | } 29 | this._program = value; 30 | this.applyEffect(); 31 | } 32 | 33 | //shader参数 34 | @property({type: [ShaderProperty]}) 35 | _props: ShaderProperty[] = []; 36 | 37 | @property({type: [ShaderProperty]}) 38 | get props() : ShaderProperty[] { 39 | return this._props; 40 | } 41 | 42 | set props(value) { 43 | this._props = value; 44 | this.applyEffect(); 45 | } 46 | 47 | //材质对象 48 | material: cc.Material = null; 49 | 50 | //effect的数组 51 | static effectAssets: any[] = null; 52 | 53 | start () { 54 | if (CC_EDITOR) { 55 | setTimeout(() => { 56 | this.applyEffect(); 57 | }, 1000); 58 | 59 | } else { 60 | this.applyEffect(); 61 | } 62 | this.node.on(cc.Node.EventType.TOUCH_END, this.next, this); 63 | } 64 | 65 | applyEffect() { 66 | 67 | //获取精灵组件 68 | let sprite = this.node.getComponent(cc.Sprite) || this.node.getComponent(cc.Label); 69 | if (!sprite) { 70 | return; 71 | } 72 | 73 | let effectAsset = ShaderHelper.effectAssets[this.program]; 74 | //实例化一个材质对象 75 | let material = new cc.Material(); 76 | 77 | //在材质对象上开启USE_TEXTURE定义s 78 | let defineUserTexture = !!effectAsset.shaders.find(shader => shader.defines.find(def => def.name === 'USE_TEXTURE')); 79 | if (defineUserTexture) { 80 | material.define('USE_TEXTURE', true); 81 | } 82 | 83 | //为材质设置effect,也是就绑定Shader了 84 | material.effectAsset = effectAsset 85 | material.name = effectAsset.name; 86 | 87 | //将材质绑定到精灵组件上,精灵可以绑定多个材质 88 | //这里我们替换0号默认材质 89 | sprite.setMaterial(0, material); 90 | 91 | //从精灵组件上获取材质,这步很重要,不然没效果 92 | this.material = sprite.getMaterial(0); 93 | this.setProperty(effectAsset); 94 | } 95 | 96 | setProperty(effectAsset) { 97 | if (CC_EDITOR) { 98 | let oldProps = this._props; 99 | this._props = []; 100 | let keys = Object.keys(effectAsset.properties); 101 | //@ts-ignore 102 | let values = Object.values(effectAsset.properties); 103 | 104 | for (let i = 0; i < values.length; i++) { 105 | let value: number = values[i].value; 106 | let key = keys[i]; 107 | if (value !== null && values[i].type === 4) { 108 | let oldItem = oldProps.find(item => item.key === key); 109 | if (oldItem) { 110 | value = oldItem.value; 111 | } 112 | let sp = new ShaderProperty() 113 | sp.key = key; 114 | sp.value = value; 115 | this._props.push(sp); 116 | } 117 | } 118 | 119 | // setTimeout(() => { 120 | let shaderTimer = this.getComponent('ShaderTime'); 121 | //cc.log(shaderTimer.max); 122 | if (shaderTimer) { 123 | shaderTimer.max = shaderTimer.max; 124 | } 125 | //}, 1000); 126 | } 127 | 128 | if (this._props.length) { 129 | this._props.forEach(item => item.key && this.material.setProperty(item.key, item.value || 0)); 130 | } 131 | // @ts-ignore 132 | cc.Class.Attr.setClassAttr(ShaderHelper, 'props', 'visible', !!this._props.length); 133 | } 134 | 135 | next() { 136 | this.program = (this.program + 1) % ShaderHelper.effectAssets.length; 137 | } 138 | 139 | } 140 | 141 | cc.game.on(cc.game.EVENT_ENGINE_INITED, () => { 142 | //cc.dynamicAtlasManager.enabled = false; 143 | cc.loader.loadResDir('effects', cc.EffectAsset ,(error, res) => { 144 | ShaderHelper.effectAssets = res; 145 | let array = ShaderHelper.effectAssets.map((item, i) => { 146 | return {name:item._name, value: i}; 147 | }); 148 | 149 | //@ts-ignore 150 | cc.Class.Attr.setClassAttr(ShaderHelper, 'program', 'enumList', array); 151 | }); 152 | }) -------------------------------------------------------------------------------- /assets/components/ShaderHelper.ts.meta: -------------------------------------------------------------------------------- 1 | { 2 | "ver": "1.0.5", 3 | "uuid": "49d0aba5-78cf-4691-a520-7fe8a7305a11", 4 | "isPlugin": false, 5 | "loadPluginInWeb": true, 6 | "loadPluginInNative": true, 7 | "loadPluginInEditor": false, 8 | "subMetas": {} 9 | } -------------------------------------------------------------------------------- /assets/components/ShaderNameLabel.ts: -------------------------------------------------------------------------------- 1 | import ShaderHelper from './ShaderHelper'; 2 | 3 | const {ccclass, property, executeInEditMode} = cc._decorator; 4 | 5 | @ccclass 6 | @executeInEditMode 7 | export default class NewClass extends cc.Component { 8 | 9 | @property(ShaderHelper) 10 | shaderHelper = null; 11 | 12 | start () { 13 | if (!this.shaderHelper) { 14 | return; 15 | } 16 | 17 | setTimeout(() => { 18 | let effectAsset = ShaderHelper.effectAssets[this.shaderHelper.program]; 19 | this.getComponent(cc.Label).string = effectAsset.name; 20 | }, 1000); 21 | 22 | } 23 | 24 | // update (dt) {} 25 | } 26 | -------------------------------------------------------------------------------- /assets/components/ShaderNameLabel.ts.meta: -------------------------------------------------------------------------------- 1 | { 2 | "ver": "1.0.5", 3 | "uuid": "4cd0f7d0-7bbe-4376-8779-76a9c480b1f1", 4 | "isPlugin": false, 5 | "loadPluginInWeb": true, 6 | "loadPluginInNative": true, 7 | "loadPluginInEditor": false, 8 | "subMetas": {} 9 | } -------------------------------------------------------------------------------- /assets/components/ShaderTime.ts: -------------------------------------------------------------------------------- 1 | 2 | const {ccclass, property} = cc._decorator; 3 | 4 | @ccclass 5 | export default class ShaderTime extends cc.Component { 6 | _material: any; 7 | 8 | @property 9 | _max: number = 65535; 10 | 11 | isUpdate: boolean; 12 | 13 | @property 14 | get max(): number { 15 | return this._max; 16 | } 17 | set max(value) { 18 | this._max = value; 19 | if (!CC_EDITOR) { 20 | return; 21 | } 22 | 23 | let sprite = this.node.getComponent(cc.Sprite); 24 | if (sprite) { 25 | this._material = this.getComponent(cc.Sprite).sharedMaterials[0]; 26 | if (this._material.effect._properties.time) { 27 | let material: any = sprite.sharedMaterials[0]; 28 | material.effect.setProperty('time', value); 29 | } 30 | } 31 | } 32 | 33 | private _start = 0; 34 | 35 | protected update(dt) { 36 | this._material = this.node.getComponent(cc.Sprite).sharedMaterials[0]; 37 | if (this.node.active && this._material && this._material.effect._properties.time) { 38 | this._setShaderTime(dt); 39 | } 40 | } 41 | private _setShaderTime(dt) { 42 | let start = this._start; 43 | if (start > this.max) start = 0; 44 | start += 0.02; 45 | this._material.effect.setProperty('time', start); 46 | 47 | this._start = start; 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /assets/components/ShaderTime.ts.meta: -------------------------------------------------------------------------------- 1 | { 2 | "ver": "1.0.5", 3 | "uuid": "5866c9ff-c97b-4eeb-ae1c-db9827c12764", 4 | "isPlugin": false, 5 | "loadPluginInWeb": true, 6 | "loadPluginInNative": true, 7 | "loadPluginInEditor": false, 8 | "subMetas": {} 9 | } -------------------------------------------------------------------------------- /assets/resources.meta: -------------------------------------------------------------------------------- 1 | { 2 | "ver": "1.0.1", 3 | "uuid": "d481f59b-d869-4dae-9cee-2d86ae57024a", 4 | "isSubpackage": false, 5 | "subpackageName": "", 6 | "subMetas": {} 7 | } -------------------------------------------------------------------------------- /assets/resources/effects.meta: -------------------------------------------------------------------------------- 1 | { 2 | "ver": "1.0.1", 3 | "uuid": "116d6bb7-e535-4fa5-8174-f4b1ae45216b", 4 | "isSubpackage": false, 5 | "subpackageName": "", 6 | "subMetas": {} 7 | } -------------------------------------------------------------------------------- /assets/resources/effects/Blur.effect: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. 2 | 3 | // Note: Current format version is experiment, the format may be changed. 4 | // The future format may not be compatible, you may need to update the script manually. 5 | 6 | // 注意:当前版本的格式是实验性的,之后还会进行修改。 7 | // 后续版本的格式不保证兼容当前格式,可能需要手动升级到最新版本。, 8 | %{ 9 | techniques: [ 10 | { 11 | passes: [ 12 | { 13 | vert: vs 14 | frag: fs 15 | cullMode: none 16 | blend: true 17 | } 18 | ] 19 | layer: 0 20 | } 21 | ] 22 | properties: { 23 | texture: { 24 | type: sampler2D 25 | value: null 26 | } 27 | num: { 28 | type: float 29 | displayName:'模糊强度' 30 | value: 0.02 31 | } 32 | light: { 33 | type: float 34 | displayName:'亮度' 35 | value: 1.0 36 | } 37 | } 38 | %} 39 | 40 | %% vs { 41 | 42 | precision highp float; 43 | 44 | uniform mat4 cc_matViewProj; 45 | attribute vec3 a_position; 46 | attribute vec2 a_uv0; 47 | varying vec2 uv0; 48 | void main () { 49 | vec4 pos = cc_matViewProj * vec4(a_position, 1); 50 | gl_Position = pos; 51 | uv0 = a_uv0; 52 | } 53 | 54 | } 55 | 56 | %% fs { 57 | 58 | precision highp float; 59 | // 重复次数,值越大模糊质量越高,但性能越低 60 | #define repeats 5. 61 | // 贴图采样器,来自于v2f管线 62 | uniform sampler2D texture; 63 | // 模糊度,外界属性 64 | uniform float num; 65 | // 亮度,外界属性 66 | uniform float light; 67 | // 当前点uv 68 | varying vec2 uv0; 69 | 70 | // 应用贴图UV 71 | vec4 draw(vec2 uv) { 72 | return texture2D(texture,uv).rgba; 73 | } 74 | 75 | float grid(float var, float size) { 76 | return floor(var*size)/size; 77 | } 78 | // 降低亮度 79 | vec4 dim(vec4 col, float factor) { 80 | return vec4(col.r * factor, col.g * factor, col.b * factor, col.a); 81 | } 82 | 83 | // 随机值 84 | float rand(vec2 co){ 85 | return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453); 86 | } 87 | void main() 88 | { 89 | // 模糊贴图 90 | vec4 blurred_image = vec4(0.); 91 | // 重复采样 92 | for (float i = 0.; i < repeats; i++) { 93 | // 第一采样点 94 | vec2 q = vec2(cos(degrees((i/repeats)*360.)),sin(degrees((i/repeats)*360.))) * (rand(vec2(i,uv0.x+uv0.y))+num); 95 | vec2 uv2 = uv0+(q*num); 96 | blurred_image += draw(uv2)/2.; 97 | 98 | // 第二采样点 99 | q = vec2(cos(degrees((i/repeats)*360.)),sin(degrees((i/repeats)*360.))) * (rand(vec2(i+2.,uv0.x+uv0.y+24.))+num); 100 | uv2 = uv0+(q*num); 101 | blurred_image += draw(uv2)/2.; 102 | } 103 | // 中和 104 | blurred_image /= repeats; 105 | // 降低亮度 106 | blurred_image = dim(blurred_image, light); 107 | // 导出颜色 108 | gl_FragColor = vec4(blurred_image); 109 | } 110 | } 111 | -------------------------------------------------------------------------------- /assets/resources/effects/Blur.effect.meta: -------------------------------------------------------------------------------- 1 | { 2 | "ver": "1.0.15", 3 | "uuid": "39c9febf-0c68-4d5c-ad05-bc4606a0e3f1", 4 | "compiledShaders": [ 5 | { 6 | "vert": "\n#define _IS_VERT_SHADER 1\n\nprecision highp float;\n\t\n\tuniform mat4 cc_matViewProj;\n\tattribute vec3 a_position;\n\tattribute vec2 a_uv0;\n\tvarying vec2 uv0;\n\tvoid main () {\n\t\tvec4 pos = cc_matViewProj * vec4(a_position, 1);\n\t\tgl_Position = pos;\n\t\tuv0 = a_uv0;\n\t}\n\n\n", 7 | "frag": "\n#define _IS_FRAG_SHADER 1\n\nprecision highp float;\n\n#define repeats 5.\n\nuniform sampler2D texture;\n\nuniform float num;\n\nuniform float light;\n\nvarying vec2 uv0;\n\nvec4 draw(vec2 uv) {\n return texture2D(texture,uv).rgba; \n}\n\nfloat grid(float var, float size) {\n return floor(var*size)/size;\n}\n\t\n\tvec4 dim(vec4 col, float factor) {\n\t\treturn vec4(col.r * factor, col.g * factor, col.b * factor, col.a);\n\t}\n\t\n\nfloat rand(vec2 co){\n return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453);\n}\nvoid main()\n{\n \n vec4 blurred_image = vec4(0.);\n \t\n for (float i = 0.; i < repeats; i++) { \n \n vec2 q = vec2(cos(degrees((i/repeats)*360.)),sin(degrees((i/repeats)*360.))) * (rand(vec2(i,uv0.x+uv0.y))+num); \n vec2 uv2 = uv0+(q*num);\n blurred_image += draw(uv2)/2.;\n \n \n q = vec2(cos(degrees((i/repeats)*360.)),sin(degrees((i/repeats)*360.))) * (rand(vec2(i+2.,uv0.x+uv0.y+24.))+num); \n uv2 = uv0+(q*num);\n blurred_image += draw(uv2)/2.;\n }\n \t\n blurred_image /= repeats;\n \t\n\t\tblurred_image = dim(blurred_image, light);\n \n gl_FragColor = vec4(blurred_image);\n}\n\n\n" 8 | } 9 | ], 10 | "subMetas": {} 11 | } -------------------------------------------------------------------------------- /assets/resources/effects/CirclePortrait.effect: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. 2 | 3 | // Note: Current format version is experiment, the format may be changed. 4 | // The future format may not be compatible, you may need to update the script manually. 5 | 6 | // 注意:当前版本的格式是实验性的,之后还会进行修改。 7 | // 后续版本的格式不保证兼容当前格式,可能需要手动升级到最新版本。, 8 | %{ 9 | techniques: [ 10 | { 11 | passes: [ 12 | { 13 | vert: vs 14 | frag: fs 15 | cullMode: none 16 | blend: true 17 | } 18 | ] 19 | layer: 0 20 | } 21 | ] 22 | properties: { 23 | texture: { 24 | type: sampler2D 25 | value: null 26 | } 27 | u_edge: { 28 | type: float 29 | displayName:'边缘(0~1)' 30 | tooltip:'范围0~1' 31 | value: 0.5 32 | } 33 | u_offset: { 34 | type: float 35 | displayName:'边缘外发光(0~0.1)' 36 | value: 0.01 37 | } 38 | edge_blur: { 39 | type: float 40 | displayName:'边缘羽化(0.01~0.1)' 41 | value: 0.01 42 | } 43 | color0: { 44 | type: color4 45 | displayName:'颜色' 46 | value: [1, 1, 1, 1] 47 | } 48 | edge_color0: { 49 | type: color4 50 | displayName:'截取边缘颜色' 51 | value: [1, 1, 1, 0] 52 | } 53 | } 54 | %} 55 | 56 | %% vs { 57 | 58 | precision highp float; 59 | 60 | uniform mat4 cc_matViewProj; 61 | attribute vec4 a_position; 62 | attribute vec2 a_uv0; 63 | varying vec2 uv0; 64 | void main() 65 | { 66 | gl_Position = cc_matViewProj * a_position; 67 | uv0 = a_uv0; 68 | } 69 | } 70 | 71 | %% fs { 72 | 73 | precision highp float; 74 | 75 | // 贴图采样器,来自于v2f管线 76 | // 实测: 在 8 * 8 以下 和 600*600 以上的尺寸,在web上没问题 77 | uniform sampler2D texture; 78 | // 当前点uv 79 | varying vec2 uv0; 80 | 81 | uniform float u_edge; 82 | 83 | uniform vec4 color0; 84 | 85 | // 是否边缘羽化 86 | #if IS_Edge_Blur 87 | uniform float edge_blur; 88 | #endif 89 | 90 | // 是否边缘发光(不要和羽化一起使用,会有边) 91 | #if IS_EdgeGlowing 92 | uniform float u_offset; 93 | #endif 94 | 95 | // 是否使用边缘颜色 96 | #if USE_EDGE_COLOR 97 | uniform vec4 edge_color0; 98 | #endif 99 | 100 | 101 | // 应用贴图颜色 画圆 102 | vec4 drawCircle() { 103 | float edge = u_edge; 104 | float dis = 0.0; 105 | 106 | float offset = 0.0; 107 | vec2 uv = uv0; 108 | 109 | // 是否边缘发光 110 | #if IS_EdgeGlowing 111 | offset = u_offset; 112 | uv = vec2(0.5 + (uv0.x - 0.5) * ((offset*2.0) + 1.0), 0.5 + (uv0.y - 0.5) * ((offset*2.0) + 1.0)); 113 | #endif 114 | 115 | if ( uv.x < edge ) 116 | { 117 | if ( uv.y < edge ) 118 | { 119 | dis = distance( uv, vec2(edge, edge) ); 120 | } 121 | if ( uv.y > (1.0 - edge) ) 122 | { 123 | dis = distance( uv, vec2(edge, (1.0 - edge)) ); 124 | } 125 | } 126 | else if ( uv.x > (1.0 - edge) ) 127 | { 128 | if ( uv.y < edge ) 129 | { 130 | dis = distance( uv, vec2((1.0 - edge), edge ) ); 131 | } 132 | if ( uv.y > (1.0 - edge) ) 133 | { 134 | dis = distance( uv, vec2((1.0 - edge), (1.0 - edge) ) ); 135 | } 136 | } 137 | 138 | // 混合外边颜色 139 | vec4 color = color0 * texture2D(texture,uv); 140 | // 边缘颜色 141 | vec4 edge_color = color; 142 | // 边缘羽化,默认0.01,减少抗锯齿 143 | float blur = 0.0; 144 | // 是否边缘羽化 145 | #if IS_Edge_Blur 146 | blur = edge_blur; 147 | #endif 148 | 149 | // 如果有外部颜色,重新定义 边缘颜色 150 | #if USE_EDGE_COLOR 151 | // 如果应用贴图颜色混合 152 | #if USER_TEXTURE_COLOR 153 | edge_color = edge_color0 * texture2D(texture,uv); 154 | #else 155 | edge_color = edge_color0; 156 | #endif 157 | #endif 158 | 159 | if(dis > 0.001) 160 | { 161 | // 外圈沟 162 | float gap = edge * blur; 163 | if(dis <= edge - gap) 164 | { 165 | color = color; 166 | } 167 | else if(dis <= edge) 168 | { 169 | // 平滑过渡: ret smoothstep(a, b, x) 可以用来生成0到1的平滑过渡. 170 | float t = smoothstep(0.,gap,edge-dis); 171 | 172 | // 边缘颜色和透明度 173 | color = vec4(edge_color.rgb,t * edge_color.a); 174 | }else{ 175 | // 隐藏不要的部分 176 | 177 | // 是否边缘发光 178 | #if IS_EdgeGlowing 179 | color = vec4(edge_color.rgb, (offset - (dis - edge))/offset); 180 | #else 181 | color = vec4(edge_color.rgb,0.); 182 | #endif 183 | } 184 | } 185 | else 186 | { 187 | // 是否边缘发光 188 | #if IS_EdgeGlowing 189 | float absX = abs(uv.x - 0.5); 190 | if(absX > 0.5) 191 | { 192 | color = vec4( edge_color.rgb, (offset - (absX - 0.5))/offset); 193 | } 194 | else 195 | { 196 | float absY = abs(uv.y - 0.5); 197 | if (absY > 0.5){ 198 | color = vec4( edge_color.rgb, (offset - (absX - 0.5))/offset); 199 | } 200 | else{ 201 | color = color; 202 | } 203 | } 204 | #else 205 | color = color; 206 | #endif 207 | } 208 | return color; 209 | } 210 | 211 | 212 | void main() 213 | { 214 | vec4 color = drawCircle(); 215 | gl_FragColor = color; 216 | } 217 | } 218 | -------------------------------------------------------------------------------- /assets/resources/effects/CirclePortrait.effect.meta: -------------------------------------------------------------------------------- 1 | { 2 | "ver": "1.0.15", 3 | "uuid": "a1b77568-802d-45e1-becc-0756116109a4", 4 | "compiledShaders": [ 5 | { 6 | "vert": "\n#define _IS_VERT_SHADER 1\n\n precision highp float;\n\n uniform mat4 cc_matViewProj;\n attribute vec4 a_position;\n attribute vec2 a_uv0;\n varying vec2 uv0;\n void main()\n {\n gl_Position = cc_matViewProj * a_position;\n uv0 = a_uv0;\n }\n\n\n", 7 | "frag": "\n#define _IS_FRAG_SHADER 1\n\n precision highp float;\n\n \n \n uniform sampler2D texture;\n \n varying vec2 uv0;\n \n uniform float u_edge;\n\n uniform vec4 color0; \n\n#if IS_Edge_Blur\n uniform float edge_blur; \n#endif\n\n#if IS_EdgeGlowing\n uniform float u_offset; \n#endif\n\n#if USE_EDGE_COLOR\n uniform vec4 edge_color0; \n#endif\n\nvec4 drawCircle() {\n float edge = u_edge;\n float dis = 0.0;\n\n float offset = 0.0;\n vec2 uv = uv0;\n\n#if IS_EdgeGlowing\n offset = u_offset; \n uv = vec2(0.5 + (uv0.x - 0.5) * ((offset*2.0) + 1.0), 0.5 + (uv0.y - 0.5) * ((offset*2.0) + 1.0)); \n#endif\n \n if ( uv.x < edge )\n {\n if ( uv.y < edge )\n {\n dis = distance( uv, vec2(edge, edge) );\n }\n if ( uv.y > (1.0 - edge) )\n {\n dis = distance( uv, vec2(edge, (1.0 - edge)) );\n }\n }\n else if ( uv.x > (1.0 - edge) )\n {\n if ( uv.y < edge )\n {\n dis = distance( uv, vec2((1.0 - edge), edge ) );\n }\n if ( uv.y > (1.0 - edge) )\n {\n dis = distance( uv, vec2((1.0 - edge), (1.0 - edge) ) );\n }\n }\n\n \n vec4 color = color0 * texture2D(texture,uv);\n \n vec4 edge_color = color;\n \n float blur = 0.0;\n \n #if IS_Edge_Blur\n blur = edge_blur;\n #endif\n\n \n #if USE_EDGE_COLOR\n \n #if USER_TEXTURE_COLOR\n edge_color = edge_color0 * texture2D(texture,uv);\n #else\n edge_color = edge_color0;\n #endif\n #endif\n \n if(dis > 0.001)\n {\n \n float gap = edge * blur;\n if(dis <= edge - gap)\n {\n color = color;\n }\n else if(dis <= edge)\n {\n \n float t = smoothstep(0.,gap,edge-dis);\n \n \n color = vec4(edge_color.rgb,t * edge_color.a);\n }else{\n \n \n \n #if IS_EdgeGlowing\n color = vec4(edge_color.rgb, (offset - (dis - edge))/offset); \n #else\n color = vec4(edge_color.rgb,0.); \n #endif\n }\n }\n else\n {\n \n #if IS_EdgeGlowing\n float absX = abs(uv.x - 0.5);\n if(absX > 0.5)\n {\n color = vec4( edge_color.rgb, (offset - (absX - 0.5))/offset);\n }\n else \n {\n float absY = abs(uv.y - 0.5);\n if (absY > 0.5){\n color = vec4( edge_color.rgb, (offset - (absX - 0.5))/offset);\n }\n else{\n color = color;\n }\n }\n #else\n color = color;\n #endif\n }\n return color; \n}\n\n void main()\n {\n vec4 color = drawCircle();\n gl_FragColor = color;\n }\n\n\n" 8 | } 9 | ], 10 | "subMetas": {} 11 | } -------------------------------------------------------------------------------- /assets/resources/effects/CirclePortrait_Base.effect: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. 2 | 3 | // Note: Current format version is experiment, the format may be changed. 4 | // The future format may not be compatible, you may need to update the script manually. 5 | 6 | // 注意:当前版本的格式是实验性的,之后还会进行修改。 7 | // 后续版本的格式不保证兼容当前格式,可能需要手动升级到最新版本。, 8 | %{ 9 | techniques: [ 10 | { 11 | passes: [ 12 | { 13 | vert: vs 14 | frag: fs 15 | cullMode: none 16 | blend: true 17 | } 18 | ] 19 | layer: 0 20 | } 21 | ] 22 | properties: { 23 | texture: { 24 | type: sampler2D 25 | value: null 26 | } 27 | u_edge: { 28 | type: float 29 | displayName:'边缘(0~1)' 30 | tooltip:'范围0~1' 31 | value: 0.5 32 | } 33 | edge_blur: { 34 | type: float 35 | displayName:'边缘羽化(0.01~0.1)' 36 | value: 0.01 37 | } 38 | color0: { 39 | type: color4 40 | displayName:'颜色' 41 | value: [1, 1, 1, 1] 42 | } 43 | edge_color0: { 44 | type: color4 45 | displayName:'截取边缘颜色' 46 | value: [1, 1, 1, 0] 47 | } 48 | } 49 | %} 50 | 51 | %% vs { 52 | 53 | precision highp float; 54 | 55 | uniform mat4 cc_matViewProj; 56 | attribute vec4 a_position; 57 | attribute vec2 a_uv0; 58 | varying vec2 uv0; 59 | void main() 60 | { 61 | gl_Position = cc_matViewProj * a_position; 62 | uv0 = a_uv0; 63 | } 64 | } 65 | 66 | %% fs { 67 | 68 | precision highp float; 69 | 70 | // 贴图采样器,来自于v2f管线 71 | uniform sampler2D texture; 72 | // 当前点uv 73 | varying vec2 uv0; 74 | 75 | uniform float u_edge; 76 | 77 | uniform vec4 color0; 78 | 79 | uniform float edge_blur; 80 | 81 | // 是否使用边缘颜色 82 | #if USE_EDGE_COLOR 83 | uniform vec4 edge_color0; 84 | #endif 85 | 86 | // 应用贴图颜色 画圆 87 | vec4 drawCircle() { 88 | float edge = u_edge; 89 | float dis = 0.0; 90 | 91 | vec2 uv = uv0; 92 | 93 | if ( uv.x < edge ) 94 | { 95 | if ( uv.y < edge ) 96 | { 97 | dis = distance( uv, vec2(edge, edge) ); 98 | } 99 | if ( uv.y > (1.0 - edge) ) 100 | { 101 | dis = distance( uv, vec2(edge, (1.0 - edge)) ); 102 | } 103 | } 104 | else if ( uv.x > (1.0 - edge) ) 105 | { 106 | if ( uv.y < edge ) 107 | { 108 | dis = distance( uv, vec2((1.0 - edge), edge ) ); 109 | } 110 | if ( uv.y > (1.0 - edge) ) 111 | { 112 | dis = distance( uv, vec2((1.0 - edge), (1.0 - edge) ) ); 113 | } 114 | } 115 | 116 | // 混合外边颜色 117 | vec4 color = color0 * texture2D(texture,uv); 118 | // 边缘颜色 119 | vec4 edge_color = color; 120 | // 边缘羽化,默认0.01,减少抗锯齿 121 | float blur = edge_blur; 122 | 123 | // 如果有外部颜色,重新定义 边缘颜色 124 | #if USE_EDGE_COLOR 125 | // 如果应用贴图颜色混合 126 | #if USER_TEXTURE_COLOR 127 | edge_color = edge_color0 * texture2D(texture,uv); 128 | #else 129 | edge_color = edge_color0; 130 | #endif 131 | #endif 132 | 133 | if(dis > 0.001) 134 | { 135 | // 外圈沟 136 | float gap = edge * blur; 137 | if(dis <= edge - gap) 138 | { 139 | color = color; 140 | } 141 | else if(dis <= edge) 142 | { 143 | // 平滑过渡: ret smoothstep(a, b, x) 可以用来生成0到1的平滑过渡. 144 | float t = smoothstep(0.,gap,edge-dis); 145 | 146 | // 边缘颜色和透明度 147 | color = vec4(edge_color.rgb,t * edge_color.a); 148 | }else{ 149 | // 隐藏不要的部分 150 | color = vec4(edge_color.rgb,0.); 151 | } 152 | } 153 | else 154 | { 155 | color = color; 156 | } 157 | return color; 158 | } 159 | 160 | void main() 161 | { 162 | vec4 color = drawCircle(); 163 | gl_FragColor = color; 164 | } 165 | } 166 | -------------------------------------------------------------------------------- /assets/resources/effects/CirclePortrait_Base.effect.meta: -------------------------------------------------------------------------------- 1 | { 2 | "ver": "1.0.15", 3 | "uuid": "05cbbc22-8e44-484e-9cf5-ed8ed9a529f3", 4 | "compiledShaders": [ 5 | { 6 | "vert": "\n#define _IS_VERT_SHADER 1\n\n precision highp float;\n\n uniform mat4 cc_matViewProj;\n attribute vec4 a_position;\n attribute vec2 a_uv0;\n varying vec2 uv0;\n void main()\n {\n gl_Position = cc_matViewProj * a_position;\n uv0 = a_uv0;\n }\n\n\n", 7 | "frag": "\n#define _IS_FRAG_SHADER 1\n\n precision highp float;\n\n \n uniform sampler2D texture;\n \n varying vec2 uv0;\n \n uniform float u_edge;\n\n uniform vec4 color0; \n\n uniform float edge_blur; \n\n#if USE_EDGE_COLOR\n uniform vec4 edge_color0; \n#endif\n\nvec4 drawCircle() {\n float edge = u_edge;\n float dis = 0.0;\n\n vec2 uv = uv0;\n \n if ( uv.x < edge )\n {\n if ( uv.y < edge )\n {\n dis = distance( uv, vec2(edge, edge) );\n }\n if ( uv.y > (1.0 - edge) )\n {\n dis = distance( uv, vec2(edge, (1.0 - edge)) );\n }\n }\n else if ( uv.x > (1.0 - edge) )\n {\n if ( uv.y < edge )\n {\n dis = distance( uv, vec2((1.0 - edge), edge ) );\n }\n if ( uv.y > (1.0 - edge) )\n {\n dis = distance( uv, vec2((1.0 - edge), (1.0 - edge) ) );\n }\n }\n\n \n vec4 color = color0 * texture2D(texture,uv);\n \n vec4 edge_color = color;\n \n float blur = edge_blur;\n\n \n #if USE_EDGE_COLOR\n \n #if USER_TEXTURE_COLOR\n edge_color = edge_color0 * texture2D(texture,uv);\n #else\n edge_color = edge_color0;\n #endif\n #endif\n \n if(dis > 0.001)\n {\n \n float gap = edge * blur;\n if(dis <= edge - gap)\n {\n color = color;\n }\n else if(dis <= edge)\n {\n \n float t = smoothstep(0.,gap,edge-dis);\n \n \n color = vec4(edge_color.rgb,t * edge_color.a);\n }else{\n \n color = vec4(edge_color.rgb,0.); \n }\n }\n else\n {\n color = color;\n }\n return color; \n}\n\n void main()\n {\n vec4 color = drawCircle();\n gl_FragColor = color;\n }\n\n\n" 8 | } 9 | ], 10 | "subMetas": {} 11 | } -------------------------------------------------------------------------------- /assets/resources/effects/Dissolve.effect: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. 2 | 3 | // Note: Current format version is experiment, the format may be changed. 4 | // The future format may not be compatible, you may need to update the script manually. 5 | 6 | // 注意:当前版本的格式是实验性的,之后还会进行修改。 7 | // 后续版本的格式不保证兼容当前格式,可能需要手动升级到最新版本。, 8 | %{ 9 | techniques: [ 10 | { 11 | passes: [ 12 | { 13 | vert: vs 14 | frag: fs 15 | cullMode: none 16 | blend: true 17 | } 18 | ] 19 | layer: 0 20 | } 21 | ] 22 | properties: { 23 | texture: { 24 | type: sampler2D 25 | value: null 26 | } 27 | alphaThreshold: { 28 | type: number 29 | value: 0.5 30 | } 31 | } 32 | %} 33 | 34 | %% vs { 35 | 36 | precision highp float; 37 | 38 | uniform mat4 cc_matViewProj; 39 | 40 | #if _USE_MODEL 41 | uniform mat4 cc_matWorld; 42 | #endif 43 | 44 | attribute vec3 a_position; 45 | attribute lowp vec4 a_color; 46 | 47 | #if USE_TEXTURE 48 | attribute mediump vec2 a_uv0; 49 | varying mediump vec2 v_uv0; 50 | #endif 51 | 52 | varying lowp vec4 v_color; 53 | 54 | void main () { 55 | mat4 mvp; 56 | 57 | #if _USE_MODEL 58 | mvp = cc_matViewProj * cc_matWorld; 59 | #else 60 | mvp = cc_matViewProj; 61 | #endif 62 | 63 | #if USE_TEXTURE 64 | v_uv0 = a_uv0; 65 | #endif 66 | 67 | v_color = a_color; 68 | 69 | gl_Position = mvp * vec4(a_position, 1); 70 | } 71 | 72 | } 73 | 74 | %% fs { 75 | 76 | precision highp float; 77 | 78 | #if USE_TEXTURE 79 | uniform sampler2D texture; 80 | varying mediump vec2 v_uv0; 81 | #endif 82 | 83 | #include 84 | 85 | varying lowp vec4 v_color; 86 | uniform float time; 87 | 88 | void main () { 89 | vec4 c = v_color * texture2D(texture, v_uv0); 90 | float height = c.g; 91 | if(height < time) 92 | { 93 | discard; 94 | } 95 | if(height < time+0.04) 96 | { 97 | // 溶解颜色,可以自定义 98 | c = vec4(1, 0, 0, c.a); 99 | } 100 | gl_FragColor = c; 101 | } 102 | 103 | } 104 | -------------------------------------------------------------------------------- /assets/resources/effects/Dissolve.effect.meta: -------------------------------------------------------------------------------- 1 | { 2 | "ver": "1.0.15", 3 | "uuid": "2daa2e6b-775b-4383-954e-72bb58cd1aa7", 4 | "compiledShaders": [ 5 | { 6 | "vert": "\n#define _IS_VERT_SHADER 1\n\nprecision highp float;\n\nuniform mat4 cc_matViewProj;\n\n#if _USE_MODEL\n uniform mat4 cc_matWorld;\n#endif\n\nattribute vec3 a_position;\nattribute lowp vec4 a_color;\n\n#if USE_TEXTURE\n attribute mediump vec2 a_uv0;\n varying mediump vec2 v_uv0;\n#endif\n\nvarying lowp vec4 v_color;\n\nvoid main () {\n mat4 mvp;\n \n #if _USE_MODEL\n mvp = cc_matViewProj * cc_matWorld;\n #else\n mvp = cc_matViewProj;\n #endif\n\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n\n v_color = a_color;\n\n gl_Position = mvp * vec4(a_position, 1);\n}\n\n\n", 7 | "frag": "\n#define _IS_FRAG_SHADER 1\n\nprecision highp float;\n\n#if USE_TEXTURE\n uniform sampler2D texture;\n varying mediump vec2 v_uv0;\n#endif\n\n#if USE_ALPHA_TEST\n uniform float alphaThreshold;\n#endif\n\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\n\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\n\nvarying lowp vec4 v_color;\nuniform float time;\n\nvoid main () {\n vec4 c = v_color * texture2D(texture, v_uv0);\n float height = c.g;\n if(height < time)\n {\n discard;\n }\n if(height < time+0.04)\n {\n \n c = vec4(1, 0, 0, c.a);\n }\n gl_FragColor = c;\n}\n\n\n" 8 | } 9 | ], 10 | "subMetas": {} 11 | } -------------------------------------------------------------------------------- /assets/resources/effects/Fluxay.effect: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. 2 | 3 | // Note: Current format version is experiment, the format may be changed. 4 | // The future format may not be compatible, you may need to update the script manually. 5 | 6 | // 注意:当前版本的格式是实验性的,之后还会进行修改。 7 | // 后续版本的格式不保证兼容当前格式,可能需要手动升级到最新版本。, 8 | %{ 9 | techniques: [ 10 | { 11 | passes: [ 12 | { 13 | vert: vs 14 | frag: fs 15 | cullMode: none 16 | blend: true 17 | } 18 | ] 19 | layer: 0 20 | } 21 | ] 22 | properties: { 23 | texture: { 24 | type: sampler2D 25 | value: null 26 | } 27 | color: { 28 | type: color4 29 | displayName:'颜色' 30 | value: [1, 1, 1, 1] 31 | }, 32 | width: { 33 | type: float 34 | displayName:'流光的宽度范围' 35 | value: 0.08 36 | }, 37 | strength: { 38 | type: float 39 | displayName:'流光增亮强度' 40 | value: 0.008 41 | }, 42 | offset: { 43 | type: float 44 | displayName:'偏移值 ' 45 | value: 0.5 46 | }, 47 | } 48 | %} 49 | 50 | %% vs { 51 | 52 | precision highp float; 53 | 54 | uniform mat4 cc_matViewProj; 55 | attribute vec3 a_position; 56 | attribute vec2 a_uv0; 57 | varying vec2 uv0; 58 | void main () { 59 | vec4 pos = cc_matViewProj * vec4(a_position, 1); 60 | gl_Position = pos; 61 | uv0 = a_uv0; 62 | } 63 | } 64 | 65 | %% fs { 66 | 67 | precision highp float; 68 | 69 | uniform sampler2D texture; 70 | uniform vec4 color; 71 | uniform float time; 72 | 73 | uniform float width; 74 | uniform float strength; 75 | uniform float offset; 76 | varying vec2 uv0; 77 | 78 | void main() 79 | { 80 | vec4 src_color = color * texture2D(texture, uv0).rgba; 81 | float start = tan(time/1.414); //流光的起始x坐标 82 | 83 | if(uv0.x < (start - offset * uv0.y) && uv0.x > (start - offset * uv0.y - width)) 84 | { 85 | vec3 improve = strength * vec3(255, 255, 255); 86 | vec3 result = improve * vec3( src_color.r, src_color.g, src_color.b); 87 | gl_FragColor = vec4(result, src_color.a); 88 | 89 | }else{ 90 | gl_FragColor = src_color; 91 | } 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /assets/resources/effects/Fluxay.effect.meta: -------------------------------------------------------------------------------- 1 | { 2 | "ver": "1.0.15", 3 | "uuid": "e67c3c23-cb6e-4521-85f4-b20483d50844", 4 | "compiledShaders": [ 5 | { 6 | "vert": "\n#define _IS_VERT_SHADER 1\n\nprecision highp float;\n\nuniform mat4 cc_matViewProj;\nattribute vec3 a_position;\nattribute vec2 a_uv0;\nvarying vec2 uv0;\nvoid main () {\n vec4 pos = cc_matViewProj * vec4(a_position, 1);\n gl_Position = pos;\n uv0 = a_uv0;\n}\n\n\n", 7 | "frag": "\n#define _IS_FRAG_SHADER 1\n\nprecision highp float;\n\nuniform sampler2D texture;\nuniform vec4 color;\nuniform float time;\n\nuniform float width;\nuniform float strength;\nuniform float offset;\nvarying vec2 uv0;\n\nvoid main()\n{\n vec4 src_color = color * texture2D(texture, uv0).rgba;\n float start = tan(time/1.414); \n \n if(uv0.x < (start - offset * uv0.y) && uv0.x > (start - offset * uv0.y - width))\n {\n vec3 improve = strength * vec3(255, 255, 255);\n vec3 result = improve * vec3( src_color.r, src_color.g, src_color.b);\n gl_FragColor = vec4(result, src_color.a);\n\n }else{\n gl_FragColor = src_color;\n }\n}\n\n\n" 8 | } 9 | ], 10 | "subMetas": {} 11 | } -------------------------------------------------------------------------------- /assets/resources/effects/Fluxay2.effect: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. 2 | 3 | // Note: Current format version is experiment, the format may be changed. 4 | // The future format may not be compatible, you may need to update the script manually. 5 | 6 | // 注意:当前版本的格式是实验性的,之后还会进行修改。 7 | // 后续版本的格式不保证兼容当前格式,可能需要手动升级到最新版本。, 8 | %{ 9 | techniques: [ 10 | { 11 | passes: [ 12 | { 13 | vert: vs 14 | frag: fs 15 | cullMode: none 16 | blend: true 17 | } 18 | ] 19 | layer: 0 20 | } 21 | ] 22 | properties: { 23 | texture: { 24 | type: sampler2D 25 | value: null 26 | } 27 | factor: { 28 | type: float 29 | value: 0.6 30 | } 31 | width: { 32 | type: float 33 | displayName:'宽度' 34 | value: 0.02 35 | } 36 | color: { 37 | type: color4 38 | displayName:'颜色' 39 | value: [10.0,10.0,10.0,1.0] 40 | } 41 | } 42 | %} 43 | 44 | %% vs { 45 | 46 | precision highp float; 47 | 48 | uniform mat4 cc_matViewProj; 49 | 50 | attribute vec4 a_position; 51 | attribute vec2 a_uv0; 52 | varying vec2 uv0; 53 | 54 | void main() 55 | { 56 | gl_Position = cc_matViewProj * a_position; 57 | uv0 = a_uv0; 58 | } 59 | } 60 | 61 | %% fs { 62 | 63 | precision highp float; 64 | 65 | 66 | // 贴图采样器,来自于v2f管线 67 | uniform sampler2D texture; 68 | // 当前点uv 69 | varying vec2 uv0; 70 | 71 | uniform float factor; 72 | uniform float width; 73 | uniform vec4 color; 74 | 75 | uniform float time; 76 | void main() 77 | { 78 | vec4 texColor = texture2D(texture, uv0); 79 | 80 | float distance = abs(uv0[0]+uv0[1]-tan(time))/1.414; 81 | 82 | distance = 1.0-(1.0/width)*distance; 83 | distance = max(distance, 0.0); 84 | vec4 sample = vec4(0.0,0.0,0.0,0.0); 85 | sample[0] = color[0] * distance; 86 | sample[1] = color[1] * distance; 87 | sample[2] = color[2] * distance; 88 | sample[3] = distance; 89 | 90 | float alpha = sample[3]*texColor[3]; 91 | texColor[0] = texColor[0] + sample[0]*alpha*factor; 92 | texColor[1] = texColor[1] + sample[1]*alpha*factor; 93 | texColor[2] = texColor[2] + sample[2]*alpha*factor; 94 | gl_FragColor = texColor; 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /assets/resources/effects/Fluxay2.effect.meta: -------------------------------------------------------------------------------- 1 | { 2 | "ver": "1.0.15", 3 | "uuid": "d99ec241-c611-4e1b-a1f1-62b26c6b36b0", 4 | "compiledShaders": [ 5 | { 6 | "vert": "\n#define _IS_VERT_SHADER 1\n\nprecision highp float;\n\nuniform mat4 cc_matViewProj;\n\n attribute vec4 a_position;\n attribute vec2 a_uv0;\n varying vec2 uv0;\n\n void main()\n {\n gl_Position = cc_matViewProj * a_position;\n uv0 = a_uv0;\n }\n\n\n", 7 | "frag": "\n#define _IS_FRAG_SHADER 1\n\nprecision highp float;\n \n \n \n uniform sampler2D texture; \n \n varying vec2 uv0; \n \n uniform float factor; \n uniform float width; \n uniform vec4 color; \n\n uniform float time; \n void main() \n { \n vec4 texColor = texture2D(texture, uv0); \n \n float distance = abs(uv0[0]+uv0[1]-tan(time))/1.414; \n\n distance = 1.0-(1.0/width)*distance; \n distance = max(distance, 0.0); \n vec4 sample = vec4(0.0,0.0,0.0,0.0); \n sample[0] = color[0] * distance; \n sample[1] = color[1] * distance; \n sample[2] = color[2] * distance; \n sample[3] = distance; \n\n float alpha = sample[3]*texColor[3]; \n texColor[0] = texColor[0] + sample[0]*alpha*factor; \n texColor[1] = texColor[1] + sample[1]*alpha*factor; \n texColor[2] = texColor[2] + sample[2]*alpha*factor; \n gl_FragColor = texColor; \n }\n\n\n" 8 | } 9 | ], 10 | "subMetas": {} 11 | } -------------------------------------------------------------------------------- /assets/resources/effects/FluxaySuper.effect: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. 2 | 3 | // Note: Current format version is experiment, the format may be changed. 4 | // The future format may not be compatible, you may need to update the script manually. 5 | 6 | // 注意:当前版本的格式是实验性的,之后还会进行修改。 7 | // 后续版本的格式不保证兼容当前格式,可能需要手动升级到最新版本。, 8 | %{ 9 | techniques: [ 10 | { 11 | passes: [ 12 | { 13 | vert: vs 14 | frag: fs 15 | cullMode: none 16 | blend: true 17 | } 18 | ] 19 | layer: 0 20 | } 21 | ] 22 | properties: { 23 | texture: { 24 | type: sampler2D 25 | value: null 26 | } 27 | alphaThreshold: { 28 | type: number 29 | value: 0.5 30 | } 31 | text: { 32 | type: number 33 | value: 1 34 | } 35 | } 36 | %} 37 | 38 | %% vs { 39 | 40 | precision highp float; 41 | 42 | uniform mat4 cc_matViewProj; 43 | 44 | #if _USE_MODEL 45 | uniform mat4 cc_matWorld; 46 | #endif 47 | 48 | attribute vec3 a_position; 49 | attribute lowp vec4 a_color; 50 | 51 | #if USE_TEXTURE 52 | attribute mediump vec2 a_uv0; 53 | varying mediump vec2 v_uv0; 54 | #endif 55 | 56 | varying lowp vec4 v_color; 57 | 58 | void main () { 59 | mat4 mvp; 60 | 61 | #if _USE_MODEL 62 | mvp = cc_matViewProj * cc_matWorld; 63 | #else 64 | mvp = cc_matViewProj; 65 | #endif 66 | 67 | #if USE_TEXTURE 68 | v_uv0 = a_uv0; 69 | #endif 70 | 71 | v_color = a_color; 72 | 73 | gl_Position = mvp * vec4(a_position, 1); 74 | } 75 | 76 | } 77 | 78 | %% fs { 79 | 80 | precision highp float; 81 | 82 | #if USE_TEXTURE 83 | uniform sampler2D texture; 84 | varying mediump vec2 v_uv0; 85 | #endif 86 | 87 | #include 88 | 89 | #define TAU 6.12 90 | #define MAX_ITER 5 91 | 92 | varying lowp vec4 v_color; 93 | uniform float time; 94 | uniform float text; 95 | 96 | void main () { 97 | vec4 color = v_color; 98 | 99 | float time = time * .5+5.; 100 | // uv should be the 0-1 uv of texture... 101 | vec2 uv = v_uv0.xy;//fragCoord.xy / iResolution.xy; 102 | 103 | vec2 p = mod(uv*TAU, TAU)-250.0; 104 | 105 | vec2 i = vec2(p); 106 | float c = 1.0; 107 | float inten = .0045; 108 | 109 | for (int n = 0; n < MAX_ITER; n++) 110 | { 111 | float t = time * (1.0 - (3.5 / float(n+1))); 112 | i = p + vec2(cos(t - i.x) + sin(t + i.y), sin(t - i.y) + cos(1.5*t + i.x)); 113 | c += 1.0/length(vec2(p.x / (cos(i.x+t)/inten),p.y / (cos(i.y+t)/inten))); 114 | } 115 | c /= float(MAX_ITER); 116 | c = 1.17-pow(c, 1.4); 117 | vec4 tex = texture2D(texture,uv); 118 | vec3 colour = vec3(pow(abs(c), 20.0)); 119 | colour = clamp(colour + vec3(0.0, 0.0, .0), 0.0, tex.a); 120 | 121 | // 混合波光 122 | float alpha = c*tex[3]; 123 | tex[0] = tex[0] + colour[0]*alpha; 124 | tex[1] = tex[1] + colour[1]*alpha; 125 | tex[2] = tex[2] + colour[2]*alpha; 126 | gl_FragColor = color * tex; 127 | } 128 | 129 | } 130 | -------------------------------------------------------------------------------- /assets/resources/effects/FluxaySuper.effect.meta: -------------------------------------------------------------------------------- 1 | { 2 | "ver": "1.0.15", 3 | "uuid": "abbd74fd-a9d5-474e-962f-835b3894f02d", 4 | "compiledShaders": [ 5 | { 6 | "vert": "\n#define _IS_VERT_SHADER 1\n\nprecision highp float;\n\nuniform mat4 cc_matViewProj;\n\n#if _USE_MODEL\n uniform mat4 cc_matWorld;\n#endif\n\nattribute vec3 a_position;\nattribute lowp vec4 a_color;\n\n#if USE_TEXTURE\n attribute mediump vec2 a_uv0;\n varying mediump vec2 v_uv0;\n#endif\n\nvarying lowp vec4 v_color;\n\nvoid main () {\n mat4 mvp;\n \n #if _USE_MODEL\n mvp = cc_matViewProj * cc_matWorld;\n #else\n mvp = cc_matViewProj;\n #endif\n\n #if USE_TEXTURE\n v_uv0 = a_uv0;\n #endif\n\n v_color = a_color;\n\n gl_Position = mvp * vec4(a_position, 1);\n}\n\n\n", 7 | "frag": "\n#define _IS_FRAG_SHADER 1\n\nprecision highp float;\n\n#if USE_TEXTURE\n uniform sampler2D texture;\n varying mediump vec2 v_uv0;\n#endif\n\n#if USE_ALPHA_TEST\n uniform float alphaThreshold;\n#endif\n\nvoid ALPHA_TEST (in vec4 color) {\n #if USE_ALPHA_TEST\n if (color.a < alphaThreshold) discard;\n #endif\n}\n\nvoid ALPHA_TEST (in float alpha) {\n #if USE_ALPHA_TEST\n if (alpha < alphaThreshold) discard;\n #endif\n}\n\n#define TAU 6.12\n#define MAX_ITER 5\n\nvarying lowp vec4 v_color;\nuniform float time;\nuniform float text;\n\nvoid main () {\n vec4 color = v_color;\n\n float time = time * .5+5.;\n \n vec2 uv = v_uv0.xy;\n\n vec2 p = mod(uv*TAU, TAU)-250.0;\n\n vec2 i = vec2(p);\n float c = 1.0;\n float inten = .0045;\n\n for (int n = 0; n < MAX_ITER; n++) \n {\n float t = time * (1.0 - (3.5 / float(n+1)));\n i = p + vec2(cos(t - i.x) + sin(t + i.y), sin(t - i.y) + cos(1.5*t + i.x));\n c += 1.0/length(vec2(p.x / (cos(i.x+t)/inten),p.y / (cos(i.y+t)/inten)));\n }\n c /= float(MAX_ITER);\n c = 1.17-pow(c, 1.4);\n vec4 tex = texture2D(texture,uv);\n vec3 colour = vec3(pow(abs(c), 20.0));\n colour = clamp(colour + vec3(0.0, 0.0, .0), 0.0, tex.a);\n\n \n float alpha = c*tex[3]; \n tex[0] = tex[0] + colour[0]*alpha; \n tex[1] = tex[1] + colour[1]*alpha; \n tex[2] = tex[2] + colour[2]*alpha; \n gl_FragColor = color * tex;\n}\n\n\n" 8 | } 9 | ], 10 | "subMetas": {} 11 | } -------------------------------------------------------------------------------- /assets/resources/effects/Glowing.effect: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. 2 | 3 | // Note: Current format version is experiment, the format may be changed. 4 | // The future format may not be compatible, you may need to update the script manually. 5 | 6 | // 注意:当前版本的格式是实验性的,之后还会进行修改。 7 | // 后续版本的格式不保证兼容当前格式,可能需要手动升级到最新版本。, 8 | %{ 9 | techniques: [ 10 | { 11 | passes: [ 12 | { 13 | vert: vs 14 | frag: fs 15 | cullMode: none 16 | blend: true 17 | } 18 | ] 19 | layer: 0 20 | } 21 | ] 22 | properties: { 23 | texture: { 24 | type: sampler2D 25 | value: null 26 | }, 27 | color: { 28 | type: color4 29 | displayName:'外发光颜色' 30 | value: [1, 1, 1, 1] 31 | }, 32 | // radius:{ 33 | // type:float, 34 | // value:2.0 35 | // }, 36 | iResolution:{ 37 | type:vec3, 38 | displayName:'分辨率' 39 | value:[1280,720,0] 40 | } 41 | } 42 | %} 43 | 44 | %% vs { 45 | 46 | precision highp float; 47 | uniform mat4 cc_matViewProj; 48 | attribute vec3 a_position; 49 | attribute vec2 a_uv0; 50 | varying vec2 uv0; 51 | void main () { 52 | vec4 pos = cc_matViewProj * vec4(a_position, 1); 53 | gl_Position = pos; 54 | uv0 = a_uv0; 55 | } 56 | } 57 | 58 | %% fs { 59 | 60 | precision highp float; 61 | 62 | // 贴图采样器,来自于v2f管线 63 | uniform sampler2D texture; 64 | // 发光半径,外界属性 65 | // uniform float radius; 66 | uniform vec3 iResolution; 67 | uniform vec4 color; 68 | // 当前点uv 69 | varying vec2 uv0; 70 | /* 因为这个参数,如果使用外部传入的话,在for循环哪儿,取不到 */ 71 | const float radius = 1.0; 72 | 73 | void mainImage( out vec4 fragColor, in vec2 fragCoord ) 74 | { 75 | vec2 uv = fragCoord.xy; 76 | vec2 unit = 1.0 / iResolution.xy; 77 | vec4 texel = texture2D(texture, uv); 78 | vec4 finalColor = vec4(0.0); 79 | float density = 0.0; 80 | 81 | if(texel.a >= 1.0) 82 | { 83 | finalColor = texel; 84 | } 85 | else 86 | { 87 | for(int i = 0; i < (int(radius)); ++i) 88 | { 89 | density += texture2D(texture, vec2(uv.x + unit.x * float(i), uv.y + unit.y * float(i))).a; 90 | density += texture2D(texture, vec2(uv.x - unit.x * float(i), uv.y + unit.y * float(i))).a; 91 | density += texture2D(texture, vec2(uv.x - unit.x * float(i), uv.y - unit.y * float(i))).a; 92 | density += texture2D(texture, vec2(uv.x + unit.x * float(i), uv.y - unit.y * float(i))).a; 93 | } 94 | density = density / radius; 95 | finalColor = vec4(color.rgb * density, density); 96 | finalColor += vec4(texel.rgb * texel.a, texel.a); 97 | } 98 | fragColor = finalColor; 99 | } 100 | 101 | void main() 102 | { 103 | mainImage(gl_FragColor, uv0.xy); 104 | } 105 | } -------------------------------------------------------------------------------- /assets/resources/effects/Glowing.effect.meta: -------------------------------------------------------------------------------- 1 | { 2 | "ver": "1.0.15", 3 | "uuid": "5d220cc9-1157-45bd-bff2-d0e642cb3e3e", 4 | "compiledShaders": [ 5 | { 6 | "vert": "\n#define _IS_VERT_SHADER 1\n\nprecision highp float;\n uniform mat4 cc_matViewProj;\n attribute vec3 a_position;\n attribute vec2 a_uv0;\n varying vec2 uv0;\n void main () {\n vec4 pos = cc_matViewProj * vec4(a_position, 1);\n gl_Position = pos;\n uv0 = a_uv0;\n }\n\n\n", 7 | "frag": "\n#define _IS_FRAG_SHADER 1\n\nprecision highp float;\n\nuniform sampler2D texture;\n\nuniform vec3 iResolution;\nuniform vec4 color;\n\nvarying vec2 uv0;\n\nconst float radius = 1.0;\n\nvoid mainImage( out vec4 fragColor, in vec2 fragCoord )\n{\n vec2 uv = fragCoord.xy;\n vec2 unit = 1.0 / iResolution.xy;\n vec4 texel = texture2D(texture, uv);\n vec4 finalColor = vec4(0.0);\n float density = 0.0;\n\n if(texel.a >= 1.0)\n {\n finalColor = texel;\n }\n else\n {\n for(int i = 0; i < (int(radius)); ++i)\n {\n density += texture2D(texture, vec2(uv.x + unit.x * float(i), uv.y + unit.y * float(i))).a;\n density += texture2D(texture, vec2(uv.x - unit.x * float(i), uv.y + unit.y * float(i))).a;\n density += texture2D(texture, vec2(uv.x - unit.x * float(i), uv.y - unit.y * float(i))).a;\n density += texture2D(texture, vec2(uv.x + unit.x * float(i), uv.y - unit.y * float(i))).a;\n }\n density = density / radius;\n finalColor = vec4(color.rgb * density, density);\n finalColor += vec4(texel.rgb * texel.a, texel.a);\n }\n fragColor = finalColor;\n}\n\nvoid main()\n{\n mainImage(gl_FragColor, uv0.xy);\n}\n\n\n" 8 | } 9 | ], 10 | "subMetas": {} 11 | } -------------------------------------------------------------------------------- /assets/resources/effects/Mosaic.effect: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. 2 | 3 | // Note: Current format version is experiment, the format may be changed. 4 | // The future format may not be compatible, you may need to update the script manually. 5 | 6 | // 注意:当前版本的格式是实验性的,之后还会进行修改。 7 | // 后续版本的格式不保证兼容当前格式,可能需要手动升级到最新版本。, 8 | %{ 9 | techniques: [ 10 | { 11 | passes: [ 12 | { 13 | vert: vs 14 | frag: fs 15 | cullMode: none 16 | blend: true 17 | } 18 | ] 19 | layer: 0 20 | } 21 | ] 22 | properties: { 23 | texture: { 24 | type: sampler2D 25 | value: null 26 | } 27 | iResolution:{ 28 | type:vec3, 29 | displayName:'分辨率' 30 | value:[1280,720,0] 31 | } 32 | mosaicSize:{ 33 | type:float, 34 | displayName:'马赛克大小' 35 | value:12 36 | } 37 | } 38 | %} 39 | 40 | %% vs { 41 | precision highp float; 42 | 43 | uniform mat4 cc_matViewProj; 44 | attribute vec3 a_position; 45 | attribute vec2 a_uv0; 46 | varying vec2 uv0; 47 | void main () { 48 | vec4 pos = cc_matViewProj * vec4(a_position, 1); 49 | gl_Position = pos; 50 | uv0 = a_uv0; 51 | } 52 | } 53 | %% fs { 54 | precision highp float; 55 | 56 | uniform sampler2D texture; 57 | uniform vec3 iResolution; 58 | uniform float mosaicSize; 59 | varying vec2 uv0; 60 | 61 | void main(void) 62 | { 63 | vec4 color; 64 | vec2 xy = vec2(uv0.x * iResolution.x, uv0.y * iResolution.y); 65 | vec2 xyMosaic = vec2(floor(xy.x / mosaicSize) * mosaicSize, floor(xy.y / mosaicSize) * mosaicSize); 66 | vec2 xyFloor = vec2(floor(mod(xy.x, mosaicSize)), floor(mod(xy.y, mosaicSize))); 67 | vec2 uvMosaic = vec2(xyMosaic.x / iResolution.x, xyMosaic.y / iResolution.y); 68 | color = texture2D( texture, uvMosaic); 69 | gl_FragColor = color; 70 | } 71 | 72 | } 73 | -------------------------------------------------------------------------------- /assets/resources/effects/Mosaic.effect.meta: -------------------------------------------------------------------------------- 1 | { 2 | "ver": "1.0.15", 3 | "uuid": "1a3e168c-adef-4296-889b-c0bb7808cd93", 4 | "compiledShaders": [ 5 | { 6 | "vert": "\n#define _IS_VERT_SHADER 1\n\n precision highp float;\n \n uniform mat4 cc_matViewProj;\n attribute vec3 a_position;\n attribute vec2 a_uv0;\n varying vec2 uv0;\n void main () {\n vec4 pos = cc_matViewProj * vec4(a_position, 1);\n gl_Position = pos;\n uv0 = a_uv0;\n }\n\n\n", 7 | "frag": "\n#define _IS_FRAG_SHADER 1\n\nprecision highp float;\n\nuniform sampler2D texture;\nuniform vec3 iResolution;\nuniform float mosaicSize;\nvarying vec2 uv0;\n\nvoid main(void)\n{\n vec4 color;\n vec2 xy = vec2(uv0.x * iResolution.x, uv0.y * iResolution.y);\n vec2 xyMosaic = vec2(floor(xy.x / mosaicSize) * mosaicSize, floor(xy.y / mosaicSize) * mosaicSize);\n vec2 xyFloor = vec2(floor(mod(xy.x, mosaicSize)), floor(mod(xy.y, mosaicSize)));\n vec2 uvMosaic = vec2(xyMosaic.x / iResolution.x, xyMosaic.y / iResolution.y);\n color = texture2D( texture, uvMosaic);\n gl_FragColor = color; \n}\n\n\n" 8 | } 9 | ], 10 | "subMetas": {} 11 | } -------------------------------------------------------------------------------- /assets/resources/effects/Outline.effect: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. 2 | 3 | // Note: Current format version is experiment, the format may be changed. 4 | // The future format may not be compatible, you may need to update the script manually. 5 | 6 | // 注意:当前版本的格式是实验性的,之后还会进行修改。 7 | // 后续版本的格式不保证兼容当前格式,可能需要手动升级到最新版本。, 8 | %{ 9 | techniques: [ 10 | { 11 | passes: [ 12 | { 13 | vert: vs 14 | frag: fs 15 | cullMode: none 16 | blend: true 17 | } 18 | ] 19 | layer: 0 20 | } 21 | ] 22 | properties: { 23 | texture: { 24 | type: sampler2D 25 | value: null 26 | } 27 | iResolution:{ 28 | type:vec3, 29 | displayName:'分辨率' 30 | value:[1280,720,0] 31 | } 32 | } 33 | %} 34 | 35 | %% vs { 36 | 37 | precision highp float; 38 | 39 | uniform mat4 cc_matViewProj; 40 | attribute vec3 a_position; 41 | attribute vec2 a_uv0; 42 | varying vec2 uv0; 43 | void main () { 44 | vec4 pos = cc_matViewProj * vec4(a_position, 1); 45 | gl_Position = pos; 46 | uv0 = a_uv0; 47 | } 48 | } 49 | 50 | %% fs { 51 | 52 | precision highp float; 53 | 54 | uniform sampler2D texture; 55 | uniform vec3 iResolution; 56 | varying vec2 uv0; 57 | void main() 58 | { 59 | vec2 onePixel = vec2(1.0 / iResolution.x, 1.0 / iResolution.y); 60 | 61 | vec4 color = texture2D(texture, uv0.xy); 62 | vec4 colorRight = texture2D(texture, uv0.xy + vec2(0,onePixel.t)); 63 | vec4 colorBottom = texture2D(texture, uv0.xy + vec2(onePixel.s,0)); 64 | 65 | color.r = 3.0* sqrt( (color.r - colorRight.r) * (color.r - colorRight.r) + (color.r - colorBottom.r) * (color.r - colorBottom.r) ); 66 | color.g = 3.0* sqrt( (color.g - colorRight.g) * (color.g - colorRight.g) + (color.g - colorBottom.g) * (color.g - colorBottom.g) ); 67 | color.b = 3.0* sqrt( (color.b - colorRight.b) * (color.b - colorRight.b) + (color.b - colorBottom.b) * (color.b - colorBottom.b) ); 68 | 69 | color.r >1.0 ? 1.0 : color.r; 70 | color.g >1.0 ? 1.0 : color.g; 71 | color.b >1.0 ? 1.0 : color.b; 72 | gl_FragColor = vec4(color.rgb, 1); 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /assets/resources/effects/Outline.effect.meta: -------------------------------------------------------------------------------- 1 | { 2 | "ver": "1.0.15", 3 | "uuid": "bf1ad2f9-a565-4fc1-8934-8cc7bd50c8ea", 4 | "compiledShaders": [ 5 | { 6 | "vert": "\n#define _IS_VERT_SHADER 1\n\nprecision highp float;\n\nuniform mat4 cc_matViewProj;\nattribute vec3 a_position;\nattribute vec2 a_uv0;\nvarying vec2 uv0;\nvoid main () {\n vec4 pos = cc_matViewProj * vec4(a_position, 1);\n gl_Position = pos;\n uv0 = a_uv0;\n}\n\n\n", 7 | "frag": "\n#define _IS_FRAG_SHADER 1\n\nprecision highp float;\n\nuniform sampler2D texture;\nuniform vec3 iResolution;\nvarying vec2 uv0;\nvoid main()\n{\n vec2 onePixel = vec2(1.0 / iResolution.x, 1.0 / iResolution.y);\n\n vec4 color = texture2D(texture, uv0.xy);\n vec4 colorRight = texture2D(texture, uv0.xy + vec2(0,onePixel.t));\n vec4 colorBottom = texture2D(texture, uv0.xy + vec2(onePixel.s,0));\n\n color.r = 3.0* sqrt( (color.r - colorRight.r) * (color.r - colorRight.r) + (color.r - colorBottom.r) * (color.r - colorBottom.r) );\n color.g = 3.0* sqrt( (color.g - colorRight.g) * (color.g - colorRight.g) + (color.g - colorBottom.g) * (color.g - colorBottom.g) );\n color.b = 3.0* sqrt( (color.b - colorRight.b) * (color.b - colorRight.b) + (color.b - colorBottom.b) * (color.b - colorBottom.b) );\n\n color.r >1.0 ? 1.0 : color.r;\n color.g >1.0 ? 1.0 : color.g;\n color.b >1.0 ? 1.0 : color.b;\n gl_FragColor = vec4(color.rgb, 1);\n}\n\n\n" 8 | } 9 | ], 10 | "subMetas": {} 11 | } -------------------------------------------------------------------------------- /assets/resources/effects/RadialBlur.effect: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. 2 | 3 | // Note: Current format version is experiment, the format may be changed. 4 | // The future format may not be compatible, you may need to update the script manually. 5 | 6 | // 注意:当前版本的格式是实验性的,之后还会进行修改。 7 | // 后续版本的格式不保证兼容当前格式,可能需要手动升级到最新版本。, 8 | %{ 9 | techniques: [ 10 | { 11 | passes: [ 12 | { 13 | vert: vs 14 | frag: fs 15 | cullMode: none 16 | blend: true 17 | } 18 | ] 19 | layer: 0 20 | } 21 | ] 22 | properties: { 23 | texture: { 24 | type: sampler2D 25 | value: null 26 | } 27 | iCenter: { 28 | type: vec2 29 | value: [0.5,0.5] 30 | } 31 | iResolution: { 32 | type: vec3 33 | displayName:'分辨率' 34 | value: [1280, 720, 0] 35 | } 36 | Strength:{ 37 | type: float 38 | displayName:'模糊强度' 39 | value: 0.125 40 | } 41 | } 42 | %} 43 | 44 | %% vs { 45 | 46 | precision highp float; 47 | 48 | uniform mat4 cc_matViewProj; 49 | attribute vec3 a_position; 50 | attribute vec2 a_uv0; 51 | varying vec2 uv0; 52 | void main () { 53 | vec4 pos = cc_matViewProj * vec4(a_position, 1); 54 | gl_Position = pos; 55 | uv0 = a_uv0; 56 | } 57 | } 58 | 59 | %% fs { 60 | 61 | precision highp float; 62 | 63 | uniform sampler2D texture; 64 | uniform vec3 iResolution; 65 | uniform vec2 iCenter; 66 | uniform float Strength; 67 | varying vec2 uv0; 68 | 69 | void mainImage( out vec4 fragColor, in vec2 fragCoord ) 70 | { 71 | // const float Strength = 0.125; 72 | const int Samples = 64; //multiple of 2 73 | 74 | vec2 uv = fragCoord.xy; 75 | 76 | vec2 dir = (fragCoord.xy-iCenter.xy); 77 | 78 | vec4 color = vec4(0.0,0.0,0.0,0.0); 79 | 80 | for (int i = 0; i < Samples; i += 2) //operating at 2 samples for better performance 81 | { 82 | color += texture2D(texture,uv+float(i)/float(Samples)*dir*Strength); 83 | color += texture2D(texture,uv+float(i+1)/float(Samples)*dir*Strength); 84 | } 85 | 86 | fragColor = color/float(Samples); 87 | } 88 | 89 | void main(void) 90 | { 91 | mainImage(gl_FragColor, uv0); 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /assets/resources/effects/RadialBlur.effect.meta: -------------------------------------------------------------------------------- 1 | { 2 | "ver": "1.0.15", 3 | "uuid": "05e38189-565f-495f-934c-429c94e8fa09", 4 | "compiledShaders": [ 5 | { 6 | "vert": "\n#define _IS_VERT_SHADER 1\n\nprecision highp float;\n\nuniform mat4 cc_matViewProj;\nattribute vec3 a_position;\nattribute vec2 a_uv0;\nvarying vec2 uv0;\nvoid main () {\n vec4 pos = cc_matViewProj * vec4(a_position, 1);\n gl_Position = pos;\n uv0 = a_uv0;\n}\n\n\n", 7 | "frag": "\n#define _IS_FRAG_SHADER 1\n\nprecision highp float;\n\nuniform sampler2D texture;\nuniform vec3 iResolution;\nuniform vec2 iCenter;\nuniform float Strength;\nvarying vec2 uv0;\n\nvoid mainImage( out vec4 fragColor, in vec2 fragCoord )\n{\n \n const int Samples = 64; \n \n vec2 uv = fragCoord.xy;\n \n vec2 dir = (fragCoord.xy-iCenter.xy);\n\n vec4 color = vec4(0.0,0.0,0.0,0.0);\n \n for (int i = 0; i < Samples; i += 2) \n {\n color += texture2D(texture,uv+float(i)/float(Samples)*dir*Strength);\n color += texture2D(texture,uv+float(i+1)/float(Samples)*dir*Strength);\n } \n \n fragColor = color/float(Samples);\n}\n \nvoid main(void)\n{\n mainImage(gl_FragColor, uv0);\n}\n\n\n" 8 | } 9 | ], 10 | "subMetas": {} 11 | } -------------------------------------------------------------------------------- /assets/resources/effects/Rain.effect: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. 2 | 3 | // Note: Current format version is experiment, the format may be changed. 4 | // The future format may not be compatible, you may need to update the script manually. 5 | 6 | // 注意:当前版本的格式是实验性的,之后还会进行修改。 7 | // 后续版本的格式不保证兼容当前格式,可能需要手动升级到最新版本。, 8 | %{ 9 | techniques: [ 10 | { 11 | passes: [ 12 | { 13 | vert: vs 14 | frag: fs 15 | cullMode: none 16 | blend: true 17 | } 18 | ] 19 | layer: 0 20 | } 21 | ] 22 | properties: { 23 | texture: { 24 | type: sampler2D 25 | value: null 26 | } 27 | color: { 28 | type: color4 29 | displayName:'颜色' 30 | value: [1, 1, 1, 1] 31 | }, 32 | texSize:{ 33 | type:vec2, 34 | displayName:'图片大小' 35 | value:[1280,720] 36 | }, 37 | iResolution:{ 38 | type:vec3, 39 | displayName:'分辨率' 40 | value:[1280,720,0] 41 | } 42 | time:{ 43 | type:float, 44 | value:1.0 45 | } 46 | } 47 | %} 48 | 49 | %% vs { 50 | 51 | precision highp float; 52 | 53 | uniform mat4 cc_matViewProj; 54 | attribute vec3 a_position; 55 | attribute vec2 a_uv0; 56 | varying vec2 uv0; 57 | void main () { 58 | vec4 pos = cc_matViewProj * vec4(a_position, 1); 59 | gl_Position = pos; 60 | uv0 = a_uv0; 61 | } 62 | } 63 | 64 | %% fs { 65 | 66 | precision highp float; 67 | 68 | // Heartfelt - by Martijn Steinrucken aka BigWings - 2017 69 | // countfrolic@gmail.com 70 | // License Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License. 71 | 72 | // I revisited the rain effect I did for another shader. This one is better in multiple ways: 73 | // 1. The glass gets foggy. 74 | // 2. Drops cut trails in the fog on the glass. 75 | // 3. The amount of rain is adjustable (with Mouse.y) 76 | 77 | // To have full control over the rain, uncomment the HAS_HEART define 78 | 79 | // A video of the effect can be found here: 80 | // https://www.youtube.com/watch?v=uiF5Tlw22PI&feature=youtu.be 81 | 82 | // Music - Alone In The Dark - Vadim Kiselev 83 | // https://soundcloud.com/ahmed-gado-1/sad-piano-alone-in-the-dark 84 | // Rain sounds: 85 | // https://soundcloud.com/elirtmusic/sleeping-sound-rain-and-thunder-1-hours 86 | 87 | #define S(a, b, t) smoothstep(a, b, t) 88 | //#define CHEAP_NORMALS 89 | 90 | uniform sampler2D texture; 91 | uniform vec4 color; 92 | uniform vec3 iResolution; 93 | uniform vec2 texSize; 94 | uniform float time; 95 | varying vec2 uv0; 96 | 97 | vec3 N13(float p) { 98 | // from DAVE HOSKINS 99 | vec3 p3 = fract(vec3(p) * vec3(.1031,.11369,.13787)); 100 | p3 += dot(p3, p3.yzx + 19.19); 101 | return fract(vec3((p3.x + p3.y)*p3.z, (p3.x+p3.z)*p3.y, (p3.y+p3.z)*p3.x)); 102 | } 103 | 104 | vec4 N14(float t) { 105 | return fract(sin(t*vec4(123., 1024., 1456., 264.))*vec4(6547., 345., 8799., 1564.)); 106 | } 107 | float N(float t) { 108 | return fract(sin(t*12345.564)*7658.76); 109 | } 110 | 111 | float Saw(float b, float t) { 112 | return S(0., b, t)*S(1., b, t); 113 | } 114 | 115 | vec2 DropLayer2(vec2 uv, float t) { 116 | vec2 UV = uv; 117 | 118 | uv.y += t*0.75; 119 | vec2 a = vec2(6., 1.); 120 | vec2 grid = a*2.; 121 | vec2 id = floor(uv*grid); 122 | 123 | float colShift = N(id.x); 124 | uv.y += colShift; 125 | 126 | id = floor(uv*grid); 127 | vec3 n = N13(id.x*35.2+id.y*2376.1); 128 | vec2 st = fract(uv*grid)-vec2(.5, 0); 129 | 130 | float x = n.x-.5; 131 | 132 | float y = UV.y*20.; 133 | float wiggle = sin(y+sin(y)); 134 | x += wiggle*(.5-abs(x))*(n.z-.5); 135 | x *= .7; 136 | float ti = fract(t+n.z); 137 | y = (Saw(.85, ti)-.5)*.9+.5; 138 | vec2 p = vec2(x, y); 139 | 140 | float d = length((st-p)*a.yx); 141 | 142 | float mainDrop = S(.4, .0, d); 143 | 144 | float r = sqrt(S(1., y, st.y)); 145 | float cd = abs(st.x-x); 146 | float trail = S(.23*r, .15*r*r, cd); 147 | float trailFront = S(-.02, .02, st.y-y); 148 | trail *= trailFront*r*r; 149 | 150 | y = UV.y; 151 | float trail2 = S(.2*r, .0, cd); 152 | float droplets = max(0., (sin(y*(1.-y)*120.)-st.y))*trail2*trailFront*n.z; 153 | y = fract(y*10.)+(st.y-.5); 154 | float dd = length(st-vec2(x, y)); 155 | droplets = S(.3, 0., dd); 156 | float m = mainDrop+droplets*r*trailFront; 157 | 158 | //m += st.x>a.y*.45 || st.y>a.x*.165 ? 1.2 : 0.; 159 | return vec2(m, trail); 160 | } 161 | 162 | float StaticDrops(vec2 uv, float t) { 163 | uv *= 40.; 164 | 165 | vec2 id = floor(uv); 166 | uv = fract(uv)-.5; 167 | vec3 n = N13(id.x*107.45+id.y*3543.654); 168 | vec2 p = (n.xy-.5)*.7; 169 | float d = length(uv-p); 170 | 171 | float fade = Saw(.025, fract(t+n.z)); 172 | float c = S(.3, 0., d)*fract(n.z*10.)*fade; 173 | return c; 174 | } 175 | 176 | vec2 Drops(vec2 uv, float t, float l0, float l1, float l2) { 177 | float s = StaticDrops(uv, t)*l0; 178 | vec2 m1 = DropLayer2(uv, t)*l1; 179 | vec2 m2 = DropLayer2(uv*1.85, t)*l2; 180 | 181 | float c = s+m1.x+m2.x; 182 | c = S(.3, 1., c); 183 | 184 | return vec2(c, max(m1.y*l0, m2.y*l1)); 185 | } 186 | 187 | void main() 188 | { 189 | vec4 iMouse = vec4(0.0, 0.0, 0.0, 0.0); 190 | 191 | // 反的 192 | // vec2 fragCoord = vec2(uv0.x * texSize.x - 0.5 * texSize.x, 0.5 * texSize.y - uv0.y * texSize.y); 193 | // vec2 uv = fragCoord.xy / iResolution.y; 194 | 195 | // 正的 196 | vec2 fragCoord = vec2(-uv0.x * texSize.x + 0.5 * texSize.x, -0.5 * texSize.y + uv0.y * texSize.y); 197 | vec2 uv = -fragCoord.xy / iResolution.y; 198 | 199 | vec2 UV = (fragCoord.xy+.5*iResolution.xy) / iResolution.xy; 200 | vec3 M = iMouse.xyz/iResolution.xyz; 201 | float T = time+M.x*2.; 202 | 203 | #if HAS_HEART 204 | T = mod(time, 102.); 205 | T = mix(T, M.x*102., M.z>0.?1.:0.); 206 | #endif 207 | 208 | float t = T*.2; 209 | 210 | float rainAmount = iMouse.z>0. ? M.y : sin(T*.05)*.3+.7; 211 | 212 | float maxBlur = mix(3., 6., rainAmount); 213 | float minBlur = 2.; 214 | 215 | float story = 0.; 216 | float heart = 0.; 217 | 218 | #if HAS_HEART 219 | story = S(0., 70., T); 220 | 221 | t = min(1., T/70.); // remap drop time so it goes slower when it freezes 222 | t = 1.-t; 223 | t = (1.-t*t)*70.; 224 | 225 | float zoom= mix(.3, 1.2, story); // slowly zoom out 226 | uv *=zoom; 227 | minBlur = 4.+S(.5, 1., story)*3.; // more opaque glass towards the end 228 | maxBlur = 6.+S(.5, 1., story)*1.5; 229 | 230 | vec2 hv = uv-vec2(.0, -.1); // build heart 231 | hv.x *= .5; 232 | float s = S(110., 70., T); // heart gets smaller and fades towards the end 233 | hv.y-=sqrt(abs(hv.x))*.5*s; 234 | heart = length(hv); 235 | heart = S(.4*s, .2*s, heart)*s; 236 | rainAmount = heart; // the rain is where the heart is 237 | 238 | maxBlur-=heart; // inside the heart slighly less foggy 239 | uv *= 1.5; // zoom out a bit more 240 | t *= .25; 241 | #else 242 | float zoom = -cos(T*.2); 243 | uv *= .7+zoom*.3; 244 | #endif 245 | UV = (UV-.5)*(.9+zoom*.1)+.5; 246 | 247 | float staticDrops = S(-.5, 1., rainAmount)*2.; 248 | float layer1 = S(.25, .75, rainAmount); 249 | float layer2 = S(.0, .5, rainAmount); 250 | 251 | vec2 c = Drops(uv, t, staticDrops, layer1, layer2); 252 | 253 | vec2 e = vec2(.001, 0.); 254 | float cx = Drops(uv+e, t, staticDrops, layer1, layer2).x; 255 | float cy = Drops(uv+e.yx, t, staticDrops, layer1, layer2).x; 256 | vec2 n = vec2(cx-c.x, cy-c.x); // expensive normals 257 | 258 | #if HAS_HEART 259 | n *= 1.-S(60., 85., T); 260 | c.y *= 1.-S(80., 100., T)*.8; 261 | #endif 262 | 263 | float focus = mix(maxBlur-c.y, minBlur, S(.1, .2, c.x)); 264 | vec3 col = texture2D(texture, UV+n).rgb; 265 | // make time sync with first lightnoing 266 | 267 | #if USE_POST_PROCESSING 268 | t = (T+3.)*.5; 269 | float colFade = sin(t*.2)*.5+.5+story; 270 | col *= mix(vec3(1.), vec3(.8, .9, 1.3), colFade); // subtle color shift 271 | float fade = S(0., 10., T); // fade in at the start 272 | float lightning = sin(t*sin(t*10.)); // lighting flicker 273 | lightning *= pow(max(0., sin(t+sin(t))), 10.); // lightning flash 274 | col *= 1.+lightning*fade*mix(1., .1, story*story); // composite lightning 275 | col *= 1.-dot(UV-=.5, UV); // vignette 276 | 277 | #if HAS_HEART 278 | col = mix(pow(col, vec3(1.2)), col, heart); 279 | fade *= S(102., 97., T); 280 | #endif 281 | // 开始的时候的渐变效果 282 | #if USE_LAOD_FADE 283 | // 开启开始的时候的渐变效果 284 | col *= fade; // composite start and end fade 285 | #endif 286 | #endif 287 | 288 | //col = vec3(heart); 289 | gl_FragColor = vec4(col, 1.); 290 | } 291 | } 292 | -------------------------------------------------------------------------------- /assets/resources/effects/Rain.effect.meta: -------------------------------------------------------------------------------- 1 | { 2 | "ver": "1.0.15", 3 | "uuid": "57828729-ad72-406b-83c7-cbb6ab0520eb", 4 | "compiledShaders": [ 5 | { 6 | "vert": "\n#define _IS_VERT_SHADER 1\n\nprecision highp float;\n\n uniform mat4 cc_matViewProj;\n attribute vec3 a_position;\n attribute vec2 a_uv0;\n varying vec2 uv0;\n void main () {\n vec4 pos = cc_matViewProj * vec4(a_position, 1);\n gl_Position = pos;\n uv0 = a_uv0;\n }\n\n\n", 7 | "frag": "\n#define _IS_FRAG_SHADER 1\n\nprecision highp float;\n\n#define S(a, b, t) smoothstep(a, b, t)\n\nuniform sampler2D texture;\nuniform vec4 color;\nuniform vec3 iResolution;\nuniform vec2 texSize;\nuniform float time;\nvarying vec2 uv0;\n\nvec3 N13(float p) {\n \n vec3 p3 = fract(vec3(p) * vec3(.1031,.11369,.13787));\n p3 += dot(p3, p3.yzx + 19.19);\n return fract(vec3((p3.x + p3.y)*p3.z, (p3.x+p3.z)*p3.y, (p3.y+p3.z)*p3.x));\n}\n\nvec4 N14(float t) {\n return fract(sin(t*vec4(123., 1024., 1456., 264.))*vec4(6547., 345., 8799., 1564.));\n}\nfloat N(float t) {\n return fract(sin(t*12345.564)*7658.76);\n}\n\nfloat Saw(float b, float t) {\n return S(0., b, t)*S(1., b, t);\n}\n\nvec2 DropLayer2(vec2 uv, float t) {\n vec2 UV = uv;\n \n uv.y += t*0.75;\n vec2 a = vec2(6., 1.);\n vec2 grid = a*2.;\n vec2 id = floor(uv*grid);\n \n float colShift = N(id.x); \n uv.y += colShift;\n \n id = floor(uv*grid);\n vec3 n = N13(id.x*35.2+id.y*2376.1);\n vec2 st = fract(uv*grid)-vec2(.5, 0);\n \n float x = n.x-.5;\n \n float y = UV.y*20.;\n float wiggle = sin(y+sin(y));\n x += wiggle*(.5-abs(x))*(n.z-.5);\n x *= .7;\n float ti = fract(t+n.z);\n y = (Saw(.85, ti)-.5)*.9+.5;\n vec2 p = vec2(x, y);\n \n float d = length((st-p)*a.yx);\n \n float mainDrop = S(.4, .0, d);\n \n float r = sqrt(S(1., y, st.y));\n float cd = abs(st.x-x);\n float trail = S(.23*r, .15*r*r, cd);\n float trailFront = S(-.02, .02, st.y-y);\n trail *= trailFront*r*r;\n \n y = UV.y;\n float trail2 = S(.2*r, .0, cd);\n float droplets = max(0., (sin(y*(1.-y)*120.)-st.y))*trail2*trailFront*n.z;\n y = fract(y*10.)+(st.y-.5);\n float dd = length(st-vec2(x, y));\n droplets = S(.3, 0., dd);\n float m = mainDrop+droplets*r*trailFront;\n \n \n return vec2(m, trail);\n}\n\nfloat StaticDrops(vec2 uv, float t) {\n uv *= 40.;\n \n vec2 id = floor(uv);\n uv = fract(uv)-.5;\n vec3 n = N13(id.x*107.45+id.y*3543.654);\n vec2 p = (n.xy-.5)*.7;\n float d = length(uv-p);\n \n float fade = Saw(.025, fract(t+n.z));\n float c = S(.3, 0., d)*fract(n.z*10.)*fade;\n return c;\n}\n\nvec2 Drops(vec2 uv, float t, float l0, float l1, float l2) {\n float s = StaticDrops(uv, t)*l0; \n vec2 m1 = DropLayer2(uv, t)*l1;\n vec2 m2 = DropLayer2(uv*1.85, t)*l2;\n \n float c = s+m1.x+m2.x;\n c = S(.3, 1., c);\n \n return vec2(c, max(m1.y*l0, m2.y*l1));\n}\n\nvoid main()\n{\n vec4 iMouse = vec4(0.0, 0.0, 0.0, 0.0);\n\n \n \n \n\n \n vec2 fragCoord = vec2(-uv0.x * texSize.x + 0.5 * texSize.x, -0.5 * texSize.y + uv0.y * texSize.y);\n vec2 uv = -fragCoord.xy / iResolution.y;\n\n vec2 UV = (fragCoord.xy+.5*iResolution.xy) / iResolution.xy;\n vec3 M = iMouse.xyz/iResolution.xyz;\n float T = time+M.x*2.;\n \n #if HAS_HEART\n T = mod(time, 102.);\n T = mix(T, M.x*102., M.z>0.?1.:0.);\n #endif\n \n float t = T*.2;\n \n float rainAmount = iMouse.z>0. ? M.y : sin(T*.05)*.3+.7;\n \n float maxBlur = mix(3., 6., rainAmount);\n float minBlur = 2.;\n \n float story = 0.;\n float heart = 0.;\n \n #if HAS_HEART\n story = S(0., 70., T);\n \n t = min(1., T/70.);\t\t\t\t\t\t\n t = 1.-t;\n t = (1.-t*t)*70.;\n \n float zoom= mix(.3, 1.2, story);\t\t\n uv *=zoom;\n minBlur = 4.+S(.5, 1., story)*3.;\t\t\n maxBlur = 6.+S(.5, 1., story)*1.5;\n \n vec2 hv = uv-vec2(.0, -.1);\t\t\t\t\n hv.x *= .5;\n float s = S(110., 70., T);\t\t\t\t\n hv.y-=sqrt(abs(hv.x))*.5*s;\n heart = length(hv);\n heart = S(.4*s, .2*s, heart)*s;\n rainAmount = heart;\t\t\t\t\t\t\n \n maxBlur-=heart;\t\t\t\t\t\t\t\n uv *= 1.5;\t\t\t\t\t\t\t\t\n t *= .25;\n #else\n float zoom = -cos(T*.2);\n uv *= .7+zoom*.3;\n #endif\n UV = (UV-.5)*(.9+zoom*.1)+.5;\n \n float staticDrops = S(-.5, 1., rainAmount)*2.;\n float layer1 = S(.25, .75, rainAmount);\n float layer2 = S(.0, .5, rainAmount);\n \n vec2 c = Drops(uv, t, staticDrops, layer1, layer2);\n\n vec2 e = vec2(.001, 0.);\n float cx = Drops(uv+e, t, staticDrops, layer1, layer2).x;\n float cy = Drops(uv+e.yx, t, staticDrops, layer1, layer2).x;\n vec2 n = vec2(cx-c.x, cy-c.x);\t\t\n\n #if HAS_HEART\n n *= 1.-S(60., 85., T);\n c.y *= 1.-S(80., 100., T)*.8;\n #endif\n\n float focus = mix(maxBlur-c.y, minBlur, S(.1, .2, c.x));\n vec3 col = texture2D(texture, UV+n).rgb;\n \n\n #if USE_POST_PROCESSING\n t = (T+3.)*.5;\t\t\t\n float colFade = sin(t*.2)*.5+.5+story;\n col *= mix(vec3(1.), vec3(.8, .9, 1.3), colFade);\t\n float fade = S(0., 10., T);\t\t\t\t\t\t\t\n float lightning = sin(t*sin(t*10.));\t\t\t\t\n lightning *= pow(max(0., sin(t+sin(t))), 10.);\t\t\n col *= 1.+lightning*fade*mix(1., .1, story*story);\t\n col *= 1.-dot(UV-=.5, UV);\t\t\t\t\t\t\t\n\n #if HAS_HEART\n col = mix(pow(col, vec3(1.2)), col, heart);\n fade *= S(102., 97., T);\n #endif\n \n #if USE_LAOD_FADE\n \n col *= fade;\t\t\t\t\t\t\t\t\t\t\n #endif\n #endif\n\n \n gl_FragColor = vec4(col, 1.);\n}\n\n\n" 8 | } 9 | ], 10 | "subMetas": {} 11 | } -------------------------------------------------------------------------------- /assets/resources/effects/SearchLight.effect: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. 2 | 3 | // Note: Current format version is experiment, the format may be changed. 4 | // The future format may not be compatible, you may need to update the script manually. 5 | 6 | // 注意:当前版本的格式是实验性的,之后还会进行修改。 7 | // 后续版本的格式不保证兼容当前格式,可能需要手动升级到最新版本。, 8 | %{ 9 | techniques: [ 10 | { 11 | passes: [ 12 | { 13 | vert: vs 14 | frag: fs 15 | cullMode: none 16 | blend: true 17 | } 18 | ] 19 | layer: 0 20 | } 21 | ] 22 | properties: { 23 | texture: { 24 | type: sampler2D 25 | value: null 26 | } 27 | iResolution: { 28 | type: vec2 29 | displayName:'分辨率' 30 | value: [1280, 720, 0] 31 | } 32 | mouse: { 33 | type: vec2 34 | displayName:'鼠标' 35 | value: [640, 360] 36 | } 37 | radius: { 38 | type: vec2 39 | displayName:'半径' 40 | value: [100,100] 41 | } 42 | } 43 | %} 44 | 45 | %% vs { 46 | 47 | precision highp float; 48 | 49 | uniform mat4 cc_matViewProj; 50 | attribute vec4 a_position; 51 | attribute vec2 a_uv0; 52 | varying vec2 uv0; 53 | 54 | void main() 55 | { 56 | gl_Position = cc_matViewProj * a_position; 57 | uv0 = a_uv0; 58 | } 59 | } 60 | 61 | %% fs { 62 | 63 | precision highp float; 64 | 65 | 66 | // 贴图采样器,来自于v2f管线 67 | uniform sampler2D texture; 68 | // 当前点uv 69 | varying vec2 uv0; 70 | 71 | uniform vec2 iResolution; 72 | uniform vec2 mouse; 73 | uniform vec2 radius; 74 | 75 | void mainImage( out vec4 fragColor, in vec2 fragCoord ) 76 | { 77 | // y坐标翻转 78 | vec2 imouse = vec2(mouse.x, iResolution.y - mouse.y); 79 | // 纹理坐标 80 | vec2 uv = uv0.xy ; 81 | // 纹理采样 82 | vec4 tex = texture2D(texture, uv); 83 | // 片元到鼠标点的差向量 84 | vec2 d = uv*iResolution.xy -imouse.xy ; 85 | // 光照半径 86 | vec2 s = radius; 87 | // 点积取比例 88 | float r = dot(d, d)/dot(s,s); 89 | vec4 finalColor = tex * (1.08 - r); 90 | fragColor = vec4(finalColor.rgb,0.75); 91 | } 92 | void main() 93 | { 94 | mainImage(gl_FragColor, uv0.xy); 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /assets/resources/effects/SearchLight.effect.meta: -------------------------------------------------------------------------------- 1 | { 2 | "ver": "1.0.15", 3 | "uuid": "3aa2dbfc-5e8d-448e-b212-c564359f5f4b", 4 | "compiledShaders": [ 5 | { 6 | "vert": "\n#define _IS_VERT_SHADER 1\n\nprecision highp float;\n\nuniform mat4 cc_matViewProj;\n attribute vec4 a_position;\n attribute vec2 a_uv0;\n varying vec2 uv0;\n\n void main()\n {\n gl_Position = cc_matViewProj * a_position;\n uv0 = a_uv0;\n }\n\n\n", 7 | "frag": "\n#define _IS_FRAG_SHADER 1\n\n precision highp float;\n\n \n uniform sampler2D texture;\n \n varying vec2 uv0;\n\n uniform vec2 iResolution;\n uniform vec2 mouse;\n uniform vec2 radius;\n\n void mainImage( out vec4 fragColor, in vec2 fragCoord )\n {\n \n vec2 imouse = vec2(mouse.x, iResolution.y - mouse.y);\n \n vec2 uv = uv0.xy ;\n \n vec4 tex = texture2D(texture, uv);\n \n vec2 d = uv*iResolution.xy -imouse.xy ;\n \n vec2 s = radius;\n \n float r = dot(d, d)/dot(s,s);\n vec4 finalColor = tex * (1.08 - r); \n fragColor = vec4(finalColor.rgb,0.75);\n }\n void main()\n {\n mainImage(gl_FragColor, uv0.xy);\n }\n\n\n" 8 | } 9 | ], 10 | "subMetas": {} 11 | } -------------------------------------------------------------------------------- /assets/resources/effects/Stone.effect: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. 2 | 3 | // Note: Current format version is experiment, the format may be changed. 4 | // The future format may not be compatible, you may need to update the script manually. 5 | 6 | // 注意:当前版本的格式是实验性的,之后还会进行修改。 7 | // 后续版本的格式不保证兼容当前格式,可能需要手动升级到最新版本。, 8 | %{ 9 | techniques: [ 10 | { 11 | passes: [ 12 | { 13 | vert: vs 14 | frag: fs 15 | cullMode: none 16 | blend: true 17 | } 18 | ] 19 | layer: 0 20 | } 21 | ] 22 | properties: { 23 | texture: { 24 | type: sampler2D 25 | value: null 26 | } 27 | color: { 28 | type: color4 29 | displayName:'颜色' 30 | value: [1, 1, 1, 1] 31 | } 32 | } 33 | %} 34 | 35 | %% vs { 36 | 37 | precision highp float; 38 | 39 | uniform mat4 cc_matViewProj; 40 | attribute vec3 a_position; 41 | attribute vec2 a_uv0; 42 | varying vec2 uv0; 43 | void main () { 44 | vec4 pos = cc_matViewProj * vec4(a_position, 1); 45 | gl_Position = pos; 46 | uv0 = a_uv0; 47 | } 48 | 49 | } 50 | 51 | %% fs { 52 | 53 | precision highp float; 54 | 55 | uniform sampler2D texture; 56 | uniform vec4 color; 57 | varying vec2 uv0; 58 | 59 | void main () { 60 | vec4 c = color * texture2D(texture, uv0); 61 | float clrbright = (c.r + c.g + c.b) * (1. / 3.); 62 | float gray = (0.6) * clrbright; 63 | gl_FragColor = vec4(gray, gray, gray, c.a); 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /assets/resources/effects/Stone.effect.meta: -------------------------------------------------------------------------------- 1 | { 2 | "ver": "1.0.15", 3 | "uuid": "75fab553-8531-4038-b9d7-3022daea77a2", 4 | "compiledShaders": [ 5 | { 6 | "vert": "\n#define _IS_VERT_SHADER 1\n\nprecision highp float;\n\nuniform mat4 cc_matViewProj;\nattribute vec3 a_position;\nattribute vec2 a_uv0;\nvarying vec2 uv0;\nvoid main () {\n vec4 pos = cc_matViewProj * vec4(a_position, 1);\n gl_Position = pos;\n uv0 = a_uv0;\n}\n\n\n", 7 | "frag": "\n#define _IS_FRAG_SHADER 1\n\nprecision highp float;\n\nuniform sampler2D texture;\nuniform vec4 color;\nvarying vec2 uv0;\n\nvoid main () {\n vec4 c = color * texture2D(texture, uv0);\n float clrbright = (c.r + c.g + c.b) * (1. / 3.);\n float gray = (0.6) * clrbright;\n gl_FragColor = vec4(gray, gray, gray, c.a);\n}\n\n\n" 8 | } 9 | ], 10 | "subMetas": {} 11 | } -------------------------------------------------------------------------------- /assets/resources/effects/Water.effect: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2017-2018 Xiamen Yaji Software Co., Ltd. 2 | 3 | // Note: Current format version is experiment, the format may be changed. 4 | // The future format may not be compatible, you may need to update the script manually. 5 | 6 | // 注意:当前版本的格式是实验性的,之后还会进行修改。 7 | // 后续版本的格式不保证兼容当前格式,可能需要手动升级到最新版本。, 8 | %{ 9 | techniques: [ 10 | { 11 | passes: [ 12 | { 13 | vert: vs 14 | frag: fs 15 | cullMode: none 16 | blend: true 17 | } 18 | ] 19 | layer: 0 20 | } 21 | ] 22 | properties: { 23 | texture: { 24 | type: sampler2D 25 | value: null 26 | } 27 | iResolution:{ 28 | type:vec3, 29 | displayName:'分辨率' 30 | value:[1280,720,0] 31 | } 32 | time:{ 33 | type:float, 34 | value:1.0 35 | } 36 | } 37 | %} 38 | 39 | %% vs { 40 | 41 | precision highp float; 42 | 43 | uniform mat4 cc_matViewProj; 44 | attribute vec3 a_position; 45 | attribute vec2 a_uv0; 46 | varying vec2 uv0; 47 | void main () { 48 | vec4 pos = cc_matViewProj * vec4(a_position, 1); 49 | gl_Position = pos; 50 | uv0 = a_uv0; 51 | } 52 | } 53 | 54 | %% fs { 55 | 56 | precision highp float; 57 | 58 | uniform sampler2D texture; 59 | uniform vec3 iResolution; 60 | uniform float time; 61 | varying vec2 uv0; 62 | 63 | #define F cos(x-y)*cos(y),sin(x+y)*sin(y) 64 | 65 | vec2 s(vec2 p) 66 | { 67 | float d=time*0.2,x=8.*(p.x+d),y=8.*(p.y+d); 68 | return vec2(F); 69 | } 70 | void mainImage( out vec4 fragColor, in vec2 fragCoord ) 71 | { 72 | // 换成resolution 73 | vec2 rs = iResolution.xy; 74 | // 换成纹理坐标v_texCoord.xy 75 | vec2 uv = fragCoord; 76 | vec2 q = uv+2./iResolution.x*(s(uv)-s(uv+rs)); 77 | //反转y 78 | //q.y=1.-q.y; 79 | fragColor = texture2D(texture, q); 80 | } 81 | void main() 82 | { 83 | mainImage(gl_FragColor, uv0.xy); 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /assets/resources/effects/Water.effect.meta: -------------------------------------------------------------------------------- 1 | { 2 | "ver": "1.0.15", 3 | "uuid": "f888d50b-ac1c-4a41-abb0-c8086c871ed0", 4 | "compiledShaders": [ 5 | { 6 | "vert": "\n#define _IS_VERT_SHADER 1\n\nprecision highp float;\n\nuniform mat4 cc_matViewProj;\nattribute vec3 a_position;\nattribute vec2 a_uv0;\nvarying vec2 uv0;\nvoid main () {\n vec4 pos = cc_matViewProj * vec4(a_position, 1);\n gl_Position = pos;\n uv0 = a_uv0;\n}\n\n\n", 7 | "frag": "\n#define _IS_FRAG_SHADER 1\n\nprecision highp float;\n\nuniform sampler2D texture;\nuniform vec3 iResolution;\nuniform float time;\nvarying vec2 uv0;\n\n#define F cos(x-y)*cos(y),sin(x+y)*sin(y)\n\nvec2 s(vec2 p)\n{\n float d=time*0.2,x=8.*(p.x+d),y=8.*(p.y+d);\n return vec2(F);\n}\nvoid mainImage( out vec4 fragColor, in vec2 fragCoord )\n{\n \n vec2 rs = iResolution.xy;\n \n vec2 uv = fragCoord;\n vec2 q = uv+2./iResolution.x*(s(uv)-s(uv+rs));\n \n \n fragColor = texture2D(texture, q);\n}\nvoid main()\n{\n mainImage(gl_FragColor, uv0.xy);\n}\n\n\n" 8 | } 9 | ], 10 | "subMetas": {} 11 | } -------------------------------------------------------------------------------- /assets/scene.meta: -------------------------------------------------------------------------------- 1 | { 2 | "ver": "1.0.1", 3 | "uuid": "80fb1609-e1d3-440a-b0e2-304eb0b88b03", 4 | "isSubpackage": false, 5 | "subpackageName": "", 6 | "subMetas": {} 7 | } -------------------------------------------------------------------------------- /assets/scene/test-shader-display.fire: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "__type__": "cc.SceneAsset", 4 | "_name": "", 5 | "_objFlags": 0, 6 | "_native": "", 7 | "scene": { 8 | "__id__": 1 9 | } 10 | }, 11 | { 12 | "__type__": "cc.Scene", 13 | "_objFlags": 0, 14 | "_parent": null, 15 | "_children": [ 16 | { 17 | "__id__": 2 18 | } 19 | ], 20 | "_active": true, 21 | "_level": 0, 22 | "_components": [], 23 | "_prefab": null, 24 | "_opacity": 255, 25 | "_color": { 26 | "__type__": "cc.Color", 27 | "r": 255, 28 | "g": 255, 29 | "b": 255, 30 | "a": 255 31 | }, 32 | "_contentSize": { 33 | "__type__": "cc.Size", 34 | "width": 0, 35 | "height": 0 36 | }, 37 | "_anchorPoint": { 38 | "__type__": "cc.Vec2", 39 | "x": 0, 40 | "y": 0 41 | }, 42 | "_scale": { 43 | "__type__": "cc.Vec3", 44 | "x": 1, 45 | "y": 1, 46 | "z": 1 47 | }, 48 | "_eulerAngles": { 49 | "__type__": "cc.Vec3", 50 | "x": 0, 51 | "y": 0, 52 | "z": 0 53 | }, 54 | "_is3DNode": true, 55 | "groupIndex": 0, 56 | "autoReleaseAssets": false, 57 | "_id": "7655543f-36b2-43fb-9dd4-8b2b6ee60ea0" 58 | }, 59 | { 60 | "__type__": "cc.Node", 61 | "_name": "Canvas", 62 | "_objFlags": 0, 63 | "_parent": { 64 | "__id__": 1 65 | }, 66 | "_children": [ 67 | { 68 | "__id__": 3 69 | }, 70 | { 71 | "__id__": 5 72 | }, 73 | { 74 | "__id__": 7 75 | } 76 | ], 77 | "_active": true, 78 | "_level": 0, 79 | "_components": [ 80 | { 81 | "__id__": 108 82 | } 83 | ], 84 | "_prefab": null, 85 | "_opacity": 255, 86 | "_color": { 87 | "__type__": "cc.Color", 88 | "r": 255, 89 | "g": 255, 90 | "b": 255, 91 | "a": 255 92 | }, 93 | "_contentSize": { 94 | "__type__": "cc.Size", 95 | "width": 1334, 96 | "height": 750 97 | }, 98 | "_anchorPoint": { 99 | "__type__": "cc.Vec2", 100 | "x": 0.5, 101 | "y": 0.5 102 | }, 103 | "_position": { 104 | "__type__": "cc.Vec3", 105 | "x": 667, 106 | "y": 375, 107 | "z": 0 108 | }, 109 | "_scale": { 110 | "__type__": "cc.Vec3", 111 | "x": 1, 112 | "y": 1, 113 | "z": 1 114 | }, 115 | "_eulerAngles": { 116 | "__type__": "cc.Vec3", 117 | "x": 0, 118 | "y": 0, 119 | "z": 0 120 | }, 121 | "_skewX": 0, 122 | "_skewY": 0, 123 | "_is3DNode": false, 124 | "groupIndex": 0, 125 | "_id": "34rn+RTJ1PTZluyZgs81XY" 126 | }, 127 | { 128 | "__type__": "cc.Node", 129 | "_name": "Main Camera", 130 | "_objFlags": 0, 131 | "_parent": { 132 | "__id__": 2 133 | }, 134 | "_children": [], 135 | "_active": true, 136 | "_level": 1, 137 | "_components": [ 138 | { 139 | "__id__": 4 140 | } 141 | ], 142 | "_prefab": null, 143 | "_opacity": 255, 144 | "_color": { 145 | "__type__": "cc.Color", 146 | "r": 255, 147 | "g": 255, 148 | "b": 255, 149 | "a": 255 150 | }, 151 | "_contentSize": { 152 | "__type__": "cc.Size", 153 | "width": 0, 154 | "height": 0 155 | }, 156 | "_anchorPoint": { 157 | "__type__": "cc.Vec2", 158 | "x": 0.5, 159 | "y": 0.5 160 | }, 161 | "_position": { 162 | "__type__": "cc.Vec3", 163 | "x": 0, 164 | "y": 0, 165 | "z": 649.519052838329 166 | }, 167 | "_scale": { 168 | "__type__": "cc.Vec3", 169 | "x": 1, 170 | "y": 1, 171 | "z": 1 172 | }, 173 | "_eulerAngles": { 174 | "__type__": "cc.Vec3", 175 | "x": 0, 176 | "y": 0, 177 | "z": 0 178 | }, 179 | "_skewX": 0, 180 | "_skewY": 0, 181 | "_is3DNode": false, 182 | "groupIndex": 0, 183 | "_id": "96HKuJbyNBmqnmV+yjclrH" 184 | }, 185 | { 186 | "__type__": "cc.Camera", 187 | "_name": "", 188 | "_objFlags": 0, 189 | "node": { 190 | "__id__": 3 191 | }, 192 | "_enabled": true, 193 | "_cullingMask": 4294967295, 194 | "_clearFlags": 7, 195 | "_backgroundColor": { 196 | "__type__": "cc.Color", 197 | "r": 0, 198 | "g": 0, 199 | "b": 0, 200 | "a": 255 201 | }, 202 | "_depth": -1, 203 | "_zoomRatio": 1, 204 | "_targetTexture": null, 205 | "_fov": 60, 206 | "_orthoSize": 10, 207 | "_nearClip": 1, 208 | "_farClip": 4096, 209 | "_ortho": true, 210 | "_rect": { 211 | "__type__": "cc.Rect", 212 | "x": 0, 213 | "y": 0, 214 | "width": 1, 215 | "height": 1 216 | }, 217 | "_renderStages": 1, 218 | "_id": "33NiTquiRG87y90X9ldq3E" 219 | }, 220 | { 221 | "__type__": "cc.Node", 222 | "_name": "New Sprite(Splash)", 223 | "_objFlags": 0, 224 | "_parent": { 225 | "__id__": 2 226 | }, 227 | "_children": [], 228 | "_active": false, 229 | "_level": 1, 230 | "_components": [ 231 | { 232 | "__id__": 6 233 | } 234 | ], 235 | "_prefab": null, 236 | "_opacity": 255, 237 | "_color": { 238 | "__type__": "cc.Color", 239 | "r": 255, 240 | "g": 255, 241 | "b": 255, 242 | "a": 255 243 | }, 244 | "_contentSize": { 245 | "__type__": "cc.Size", 246 | "width": 1334, 247 | "height": 750 248 | }, 249 | "_anchorPoint": { 250 | "__type__": "cc.Vec2", 251 | "x": 0.5, 252 | "y": 0.5 253 | }, 254 | "_position": { 255 | "__type__": "cc.Vec3", 256 | "x": 0, 257 | "y": 0, 258 | "z": 0 259 | }, 260 | "_scale": { 261 | "__type__": "cc.Vec3", 262 | "x": 1, 263 | "y": 1, 264 | "z": 1 265 | }, 266 | "_eulerAngles": { 267 | "__type__": "cc.Vec3", 268 | "x": 0, 269 | "y": 0, 270 | "z": 0 271 | }, 272 | "_skewX": 0, 273 | "_skewY": 0, 274 | "_is3DNode": false, 275 | "groupIndex": 0, 276 | "_id": "c9qwamyolL/qMq2PTvE8no" 277 | }, 278 | { 279 | "__type__": "cc.Sprite", 280 | "_name": "", 281 | "_objFlags": 0, 282 | "node": { 283 | "__id__": 5 284 | }, 285 | "_enabled": true, 286 | "_materials": [], 287 | "_srcBlendFactor": 770, 288 | "_dstBlendFactor": 771, 289 | "_spriteFrame": { 290 | "__uuid__": "a23235d1-15db-4b95-8439-a2e005bfff91" 291 | }, 292 | "_type": 0, 293 | "_sizeMode": 0, 294 | "_fillType": 0, 295 | "_fillCenter": { 296 | "__type__": "cc.Vec2", 297 | "x": 0, 298 | "y": 0 299 | }, 300 | "_fillStart": 0, 301 | "_fillRange": 0, 302 | "_isTrimmedMode": true, 303 | "_atlas": null, 304 | "_id": "38cVbdjEtFwqZvBao8DeBB" 305 | }, 306 | { 307 | "__type__": "cc.Node", 308 | "_name": "ScrollView", 309 | "_objFlags": 0, 310 | "_parent": { 311 | "__id__": 2 312 | }, 313 | "_children": [ 314 | { 315 | "__id__": 8 316 | }, 317 | { 318 | "__id__": 14 319 | } 320 | ], 321 | "_active": true, 322 | "_level": 1, 323 | "_components": [ 324 | { 325 | "__id__": 12 326 | }, 327 | { 328 | "__id__": 107 329 | } 330 | ], 331 | "_prefab": null, 332 | "_opacity": 255, 333 | "_color": { 334 | "__type__": "cc.Color", 335 | "r": 255, 336 | "g": 255, 337 | "b": 255, 338 | "a": 255 339 | }, 340 | "_contentSize": { 341 | "__type__": "cc.Size", 342 | "width": 1334, 343 | "height": 750 344 | }, 345 | "_anchorPoint": { 346 | "__type__": "cc.Vec2", 347 | "x": 0.5, 348 | "y": 0.5 349 | }, 350 | "_position": { 351 | "__type__": "cc.Vec3", 352 | "x": 0, 353 | "y": 0, 354 | "z": 0 355 | }, 356 | "_scale": { 357 | "__type__": "cc.Vec3", 358 | "x": 1, 359 | "y": 1, 360 | "z": 1 361 | }, 362 | "_eulerAngles": { 363 | "__type__": "cc.Vec3", 364 | "x": 0, 365 | "y": 0, 366 | "z": 0 367 | }, 368 | "_skewX": 0, 369 | "_skewY": 0, 370 | "_is3DNode": false, 371 | "groupIndex": 0, 372 | "_id": "86MIAE4WVJTqr3aue8Ay6/" 373 | }, 374 | { 375 | "__type__": "cc.Node", 376 | "_name": "scrollBar", 377 | "_objFlags": 0, 378 | "_parent": { 379 | "__id__": 7 380 | }, 381 | "_children": [ 382 | { 383 | "__id__": 9 384 | } 385 | ], 386 | "_active": true, 387 | "_level": 0, 388 | "_components": [ 389 | { 390 | "__id__": 11 391 | }, 392 | { 393 | "__id__": 105 394 | }, 395 | { 396 | "__id__": 106 397 | } 398 | ], 399 | "_prefab": null, 400 | "_opacity": 255, 401 | "_color": { 402 | "__type__": "cc.Color", 403 | "r": 255, 404 | "g": 255, 405 | "b": 255, 406 | "a": 255 407 | }, 408 | "_contentSize": { 409 | "__type__": "cc.Size", 410 | "width": 12, 411 | "height": 750 412 | }, 413 | "_anchorPoint": { 414 | "__type__": "cc.Vec2", 415 | "x": 1, 416 | "y": 0.5 417 | }, 418 | "_position": { 419 | "__type__": "cc.Vec3", 420 | "x": 667, 421 | "y": 0, 422 | "z": 0 423 | }, 424 | "_scale": { 425 | "__type__": "cc.Vec3", 426 | "x": 1, 427 | "y": 1, 428 | "z": 1 429 | }, 430 | "_eulerAngles": { 431 | "__type__": "cc.Vec3", 432 | "x": 0, 433 | "y": 0, 434 | "z": 0 435 | }, 436 | "_skewX": 0, 437 | "_skewY": 0, 438 | "_is3DNode": false, 439 | "groupIndex": 0, 440 | "_id": "e6YEc989dGG7dQyyMKvL7S" 441 | }, 442 | { 443 | "__type__": "cc.Node", 444 | "_name": "bar", 445 | "_objFlags": 0, 446 | "_parent": { 447 | "__id__": 8 448 | }, 449 | "_children": [], 450 | "_active": true, 451 | "_level": 0, 452 | "_components": [ 453 | { 454 | "__id__": 10 455 | } 456 | ], 457 | "_prefab": null, 458 | "_opacity": 255, 459 | "_color": { 460 | "__type__": "cc.Color", 461 | "r": 255, 462 | "g": 255, 463 | "b": 255, 464 | "a": 255 465 | }, 466 | "_contentSize": { 467 | "__type__": "cc.Size", 468 | "width": 10, 469 | "height": 30 470 | }, 471 | "_anchorPoint": { 472 | "__type__": "cc.Vec2", 473 | "x": 1, 474 | "y": 0 475 | }, 476 | "_position": { 477 | "__type__": "cc.Vec3", 478 | "x": -1, 479 | "y": 0, 480 | "z": 0 481 | }, 482 | "_scale": { 483 | "__type__": "cc.Vec3", 484 | "x": 1, 485 | "y": 1, 486 | "z": 1 487 | }, 488 | "_eulerAngles": { 489 | "__type__": "cc.Vec3", 490 | "x": 0, 491 | "y": 0, 492 | "z": 0 493 | }, 494 | "_skewX": 0, 495 | "_skewY": 0, 496 | "_is3DNode": false, 497 | "groupIndex": 0, 498 | "_id": "76oDA/LfVJz4IuOXDhaGHE" 499 | }, 500 | { 501 | "__type__": "cc.Sprite", 502 | "_name": "", 503 | "_objFlags": 0, 504 | "node": { 505 | "__id__": 9 506 | }, 507 | "_enabled": true, 508 | "_materials": [ 509 | { 510 | "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" 511 | } 512 | ], 513 | "_srcBlendFactor": 770, 514 | "_dstBlendFactor": 771, 515 | "_spriteFrame": { 516 | "__uuid__": "5c3bb932-6c3c-468f-88a9-c8c61d458641" 517 | }, 518 | "_type": 1, 519 | "_sizeMode": 0, 520 | "_fillType": 0, 521 | "_fillCenter": { 522 | "__type__": "cc.Vec2", 523 | "x": 0, 524 | "y": 0 525 | }, 526 | "_fillStart": 0, 527 | "_fillRange": 0, 528 | "_isTrimmedMode": true, 529 | "_atlas": null, 530 | "_id": "509RtFv8dFtZwroQYo1C15" 531 | }, 532 | { 533 | "__type__": "cc.Scrollbar", 534 | "_name": "", 535 | "_objFlags": 0, 536 | "node": { 537 | "__id__": 8 538 | }, 539 | "_enabled": true, 540 | "_scrollView": { 541 | "__id__": 12 542 | }, 543 | "_touching": false, 544 | "_opacity": 255, 545 | "enableAutoHide": true, 546 | "autoHideTime": 1, 547 | "_N$handle": { 548 | "__id__": 10 549 | }, 550 | "_N$direction": 1, 551 | "_id": "e6FML7WAZLeYMxfQKPh9xv" 552 | }, 553 | { 554 | "__type__": "cc.ScrollView", 555 | "_name": "", 556 | "_objFlags": 0, 557 | "node": { 558 | "__id__": 7 559 | }, 560 | "_enabled": true, 561 | "horizontal": false, 562 | "vertical": true, 563 | "inertia": false, 564 | "brake": 0.75, 565 | "elastic": true, 566 | "bounceDuration": 0.23, 567 | "scrollEvents": [], 568 | "cancelInnerEvents": true, 569 | "_N$content": { 570 | "__id__": 13 571 | }, 572 | "content": { 573 | "__id__": 13 574 | }, 575 | "_N$horizontalScrollBar": null, 576 | "_N$verticalScrollBar": { 577 | "__id__": 11 578 | }, 579 | "_id": "7eWk1b1jNMc6Pq9fODvZ3x" 580 | }, 581 | { 582 | "__type__": "cc.Node", 583 | "_name": "Layout", 584 | "_objFlags": 0, 585 | "_parent": { 586 | "__id__": 14 587 | }, 588 | "_children": [ 589 | { 590 | "__id__": 17 591 | }, 592 | { 593 | "__id__": 21 594 | }, 595 | { 596 | "__id__": 28 597 | }, 598 | { 599 | "__id__": 35 600 | }, 601 | { 602 | "__id__": 42 603 | }, 604 | { 605 | "__id__": 49 606 | }, 607 | { 608 | "__id__": 55 609 | }, 610 | { 611 | "__id__": 61 612 | }, 613 | { 614 | "__id__": 68 615 | }, 616 | { 617 | "__id__": 74 618 | }, 619 | { 620 | "__id__": 80 621 | }, 622 | { 623 | "__id__": 86 624 | }, 625 | { 626 | "__id__": 92 627 | }, 628 | { 629 | "__id__": 98 630 | } 631 | ], 632 | "_active": true, 633 | "_level": 1, 634 | "_components": [ 635 | { 636 | "__id__": 104 637 | } 638 | ], 639 | "_prefab": null, 640 | "_opacity": 255, 641 | "_color": { 642 | "__type__": "cc.Color", 643 | "r": 255, 644 | "g": 255, 645 | "b": 255, 646 | "a": 255 647 | }, 648 | "_contentSize": { 649 | "__type__": "cc.Size", 650 | "width": 1334, 651 | "height": 1274 652 | }, 653 | "_anchorPoint": { 654 | "__type__": "cc.Vec2", 655 | "x": 0.5, 656 | "y": 0.5 657 | }, 658 | "_position": { 659 | "__type__": "cc.Vec3", 660 | "x": 0, 661 | "y": -264.303, 662 | "z": 0 663 | }, 664 | "_scale": { 665 | "__type__": "cc.Vec3", 666 | "x": 1, 667 | "y": 1, 668 | "z": 1 669 | }, 670 | "_eulerAngles": { 671 | "__type__": "cc.Vec3", 672 | "x": 0, 673 | "y": 0, 674 | "z": 0 675 | }, 676 | "_skewX": 0, 677 | "_skewY": 0, 678 | "_is3DNode": false, 679 | "groupIndex": 0, 680 | "_id": "b1qeseFoJGT7n+OYvr/sI7" 681 | }, 682 | { 683 | "__type__": "cc.Node", 684 | "_name": "view", 685 | "_objFlags": 0, 686 | "_parent": { 687 | "__id__": 7 688 | }, 689 | "_children": [ 690 | { 691 | "__id__": 13 692 | } 693 | ], 694 | "_active": true, 695 | "_level": 0, 696 | "_components": [ 697 | { 698 | "__id__": 15 699 | }, 700 | { 701 | "__id__": 16 702 | } 703 | ], 704 | "_prefab": null, 705 | "_opacity": 255, 706 | "_color": { 707 | "__type__": "cc.Color", 708 | "r": 255, 709 | "g": 255, 710 | "b": 255, 711 | "a": 255 712 | }, 713 | "_contentSize": { 714 | "__type__": "cc.Size", 715 | "width": 1334, 716 | "height": 750 717 | }, 718 | "_anchorPoint": { 719 | "__type__": "cc.Vec2", 720 | "x": 0.5, 721 | "y": 0.5 722 | }, 723 | "_position": { 724 | "__type__": "cc.Vec3", 725 | "x": 0, 726 | "y": 0, 727 | "z": 0 728 | }, 729 | "_scale": { 730 | "__type__": "cc.Vec3", 731 | "x": 1, 732 | "y": 1, 733 | "z": 1 734 | }, 735 | "_eulerAngles": { 736 | "__type__": "cc.Vec3", 737 | "x": 0, 738 | "y": 0, 739 | "z": 0 740 | }, 741 | "_skewX": 0, 742 | "_skewY": 0, 743 | "_is3DNode": false, 744 | "groupIndex": 0, 745 | "_id": "8cfLmPLVlJYJCkzR6//GpU" 746 | }, 747 | { 748 | "__type__": "cc.Mask", 749 | "_name": "", 750 | "_objFlags": 0, 751 | "node": { 752 | "__id__": 14 753 | }, 754 | "_enabled": true, 755 | "_materials": [ 756 | { 757 | "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" 758 | } 759 | ], 760 | "_spriteFrame": null, 761 | "_type": 0, 762 | "_segments": 64, 763 | "_N$alphaThreshold": 0, 764 | "_N$inverted": false, 765 | "_id": "d9asq66XpK7qv7e57fRqGp" 766 | }, 767 | { 768 | "__type__": "cc.Widget", 769 | "_name": "", 770 | "_objFlags": 0, 771 | "node": { 772 | "__id__": 14 773 | }, 774 | "_enabled": true, 775 | "alignMode": 1, 776 | "_target": null, 777 | "_alignFlags": 45, 778 | "_left": 0, 779 | "_right": 0, 780 | "_top": 0, 781 | "_bottom": 0, 782 | "_verticalCenter": 0, 783 | "_horizontalCenter": 0, 784 | "_isAbsLeft": true, 785 | "_isAbsRight": true, 786 | "_isAbsTop": true, 787 | "_isAbsBottom": true, 788 | "_isAbsHorizontalCenter": true, 789 | "_isAbsVerticalCenter": true, 790 | "_originalWidth": 240, 791 | "_originalHeight": 250, 792 | "_id": "6d2yT+4XRKKpfjjrxxXqte" 793 | }, 794 | { 795 | "__type__": "cc.Node", 796 | "_name": "image", 797 | "_objFlags": 0, 798 | "_parent": { 799 | "__id__": 13 800 | }, 801 | "_children": [ 802 | { 803 | "__id__": 18 804 | } 805 | ], 806 | "_active": true, 807 | "_level": 2, 808 | "_components": [ 809 | { 810 | "__id__": 20 811 | } 812 | ], 813 | "_prefab": null, 814 | "_opacity": 255, 815 | "_color": { 816 | "__type__": "cc.Color", 817 | "r": 255, 818 | "g": 255, 819 | "b": 255, 820 | "a": 255 821 | }, 822 | "_contentSize": { 823 | "__type__": "cc.Size", 824 | "width": 400, 825 | "height": 250 826 | }, 827 | "_anchorPoint": { 828 | "__type__": "cc.Vec2", 829 | "x": 0.5, 830 | "y": 0.5 831 | }, 832 | "_position": { 833 | "__type__": "cc.Vec3", 834 | "x": -463.00000000000006, 835 | "y": 508, 836 | "z": 0 837 | }, 838 | "_scale": { 839 | "__type__": "cc.Vec3", 840 | "x": 1, 841 | "y": 1, 842 | "z": 1 843 | }, 844 | "_eulerAngles": { 845 | "__type__": "cc.Vec3", 846 | "x": 0, 847 | "y": 0, 848 | "z": 0 849 | }, 850 | "_skewX": 0, 851 | "_skewY": 0, 852 | "_is3DNode": false, 853 | "groupIndex": 0, 854 | "_id": "83lJ3D17pLWowPmAw99U/h" 855 | }, 856 | { 857 | "__type__": "cc.Node", 858 | "_name": "Label", 859 | "_objFlags": 0, 860 | "_parent": { 861 | "__id__": 17 862 | }, 863 | "_children": [], 864 | "_active": true, 865 | "_level": 3, 866 | "_components": [ 867 | { 868 | "__id__": 19 869 | } 870 | ], 871 | "_prefab": null, 872 | "_opacity": 255, 873 | "_color": { 874 | "__type__": "cc.Color", 875 | "r": 255, 876 | "g": 255, 877 | "b": 255, 878 | "a": 255 879 | }, 880 | "_contentSize": { 881 | "__type__": "cc.Size", 882 | "width": 80, 883 | "height": 50.4 884 | }, 885 | "_anchorPoint": { 886 | "__type__": "cc.Vec2", 887 | "x": 0.5, 888 | "y": 0.5 889 | }, 890 | "_position": { 891 | "__type__": "cc.Vec3", 892 | "x": 0, 893 | "y": 0, 894 | "z": 0 895 | }, 896 | "_scale": { 897 | "__type__": "cc.Vec3", 898 | "x": 1, 899 | "y": 1, 900 | "z": 1 901 | }, 902 | "_eulerAngles": { 903 | "__type__": "cc.Vec3", 904 | "x": 0, 905 | "y": 0, 906 | "z": 0 907 | }, 908 | "_skewX": 0, 909 | "_skewY": 0, 910 | "_is3DNode": false, 911 | "groupIndex": 0, 912 | "_id": "01bvM+JfREP6V3/PjvRXgM" 913 | }, 914 | { 915 | "__type__": "cc.Label", 916 | "_name": "", 917 | "_objFlags": 0, 918 | "node": { 919 | "__id__": 18 920 | }, 921 | "_enabled": true, 922 | "_materials": [ 923 | { 924 | "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" 925 | } 926 | ], 927 | "_useOriginalSize": false, 928 | "_string": "原始", 929 | "_N$string": "原始", 930 | "_fontSize": 40, 931 | "_lineHeight": 40, 932 | "_enableWrapText": true, 933 | "_N$file": null, 934 | "_isSystemFontUsed": true, 935 | "_spacingX": 0, 936 | "_batchAsBitmap": false, 937 | "_N$horizontalAlign": 1, 938 | "_N$verticalAlign": 1, 939 | "_N$fontFamily": "Arial", 940 | "_N$overflow": 0, 941 | "_N$cacheMode": 0, 942 | "_id": "15lITCVIdLTr3trmy6zcCe" 943 | }, 944 | { 945 | "__type__": "cc.Sprite", 946 | "_name": "", 947 | "_objFlags": 0, 948 | "node": { 949 | "__id__": 17 950 | }, 951 | "_enabled": true, 952 | "_materials": [ 953 | { 954 | "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" 955 | } 956 | ], 957 | "_srcBlendFactor": 770, 958 | "_dstBlendFactor": 771, 959 | "_spriteFrame": { 960 | "__uuid__": "79900e22-f1e4-4f8f-9a27-033142cd41ce" 961 | }, 962 | "_type": 0, 963 | "_sizeMode": 0, 964 | "_fillType": 0, 965 | "_fillCenter": { 966 | "__type__": "cc.Vec2", 967 | "x": 0, 968 | "y": 0 969 | }, 970 | "_fillStart": 0, 971 | "_fillRange": 0, 972 | "_isTrimmedMode": true, 973 | "_atlas": null, 974 | "_id": "25n34hDXlCbY64diRfbNIt" 975 | }, 976 | { 977 | "__type__": "cc.Node", 978 | "_name": "image", 979 | "_objFlags": 0, 980 | "_parent": { 981 | "__id__": 13 982 | }, 983 | "_children": [ 984 | { 985 | "__id__": 22 986 | } 987 | ], 988 | "_active": true, 989 | "_level": 2, 990 | "_components": [ 991 | { 992 | "__id__": 26 993 | }, 994 | { 995 | "__id__": 25 996 | }, 997 | { 998 | "__id__": 27 999 | } 1000 | ], 1001 | "_prefab": null, 1002 | "_opacity": 255, 1003 | "_color": { 1004 | "__type__": "cc.Color", 1005 | "r": 255, 1006 | "g": 255, 1007 | "b": 255, 1008 | "a": 255 1009 | }, 1010 | "_contentSize": { 1011 | "__type__": "cc.Size", 1012 | "width": 400, 1013 | "height": 250 1014 | }, 1015 | "_anchorPoint": { 1016 | "__type__": "cc.Vec2", 1017 | "x": 0.5, 1018 | "y": 0.5 1019 | }, 1020 | "_position": { 1021 | "__type__": "cc.Vec3", 1022 | "x": -7.6000000000000085, 1023 | "y": 508, 1024 | "z": 0 1025 | }, 1026 | "_scale": { 1027 | "__type__": "cc.Vec3", 1028 | "x": 1, 1029 | "y": 1, 1030 | "z": 1 1031 | }, 1032 | "_eulerAngles": { 1033 | "__type__": "cc.Vec3", 1034 | "x": 0, 1035 | "y": 0, 1036 | "z": 0 1037 | }, 1038 | "_skewX": 0, 1039 | "_skewY": 0, 1040 | "_is3DNode": false, 1041 | "groupIndex": 0, 1042 | "_id": "63aN9frM1JzoUc3rXzYbtX" 1043 | }, 1044 | { 1045 | "__type__": "cc.Node", 1046 | "_name": "Label", 1047 | "_objFlags": 0, 1048 | "_parent": { 1049 | "__id__": 21 1050 | }, 1051 | "_children": [], 1052 | "_active": true, 1053 | "_level": 3, 1054 | "_components": [ 1055 | { 1056 | "__id__": 23 1057 | }, 1058 | { 1059 | "__id__": 24 1060 | } 1061 | ], 1062 | "_prefab": null, 1063 | "_opacity": 255, 1064 | "_color": { 1065 | "__type__": "cc.Color", 1066 | "r": 255, 1067 | "g": 255, 1068 | "b": 255, 1069 | "a": 255 1070 | }, 1071 | "_contentSize": { 1072 | "__type__": "cc.Size", 1073 | "width": 151.15, 1074 | "height": 50.4 1075 | }, 1076 | "_anchorPoint": { 1077 | "__type__": "cc.Vec2", 1078 | "x": 0.5, 1079 | "y": 0.5 1080 | }, 1081 | "_position": { 1082 | "__type__": "cc.Vec3", 1083 | "x": 0, 1084 | "y": 0, 1085 | "z": 0 1086 | }, 1087 | "_scale": { 1088 | "__type__": "cc.Vec3", 1089 | "x": 1, 1090 | "y": 1, 1091 | "z": 1 1092 | }, 1093 | "_eulerAngles": { 1094 | "__type__": "cc.Vec3", 1095 | "x": 0, 1096 | "y": 0, 1097 | "z": 0 1098 | }, 1099 | "_skewX": 0, 1100 | "_skewY": 0, 1101 | "_is3DNode": false, 1102 | "groupIndex": 0, 1103 | "_id": "fcriDPL2xMa5Yl1ffYSwf/" 1104 | }, 1105 | { 1106 | "__type__": "cc.Label", 1107 | "_name": "", 1108 | "_objFlags": 0, 1109 | "node": { 1110 | "__id__": 22 1111 | }, 1112 | "_enabled": true, 1113 | "_materials": [ 1114 | { 1115 | "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" 1116 | } 1117 | ], 1118 | "_useOriginalSize": false, 1119 | "_string": "Dissolve", 1120 | "_N$string": "Dissolve", 1121 | "_fontSize": 40, 1122 | "_lineHeight": 40, 1123 | "_enableWrapText": true, 1124 | "_N$file": null, 1125 | "_isSystemFontUsed": true, 1126 | "_spacingX": 0, 1127 | "_batchAsBitmap": false, 1128 | "_N$horizontalAlign": 1, 1129 | "_N$verticalAlign": 1, 1130 | "_N$fontFamily": "Arial", 1131 | "_N$overflow": 0, 1132 | "_N$cacheMode": 0, 1133 | "_id": "c5/ZDX3m9AiIp6Eq951MLf" 1134 | }, 1135 | { 1136 | "__type__": "4cd0ffQe75Ddod5dqnEgLHx", 1137 | "_name": "", 1138 | "_objFlags": 0, 1139 | "node": { 1140 | "__id__": 22 1141 | }, 1142 | "_enabled": true, 1143 | "shaderHelper": { 1144 | "__id__": 25 1145 | }, 1146 | "_id": "e0QhxQ3BJM4pgi+rrzJZp4" 1147 | }, 1148 | { 1149 | "__type__": "49d0auleM9GkaUgf+inMFoR", 1150 | "_name": "", 1151 | "_objFlags": 0, 1152 | "node": { 1153 | "__id__": 21 1154 | }, 1155 | "_enabled": true, 1156 | "_program": 3, 1157 | "_props": [], 1158 | "_id": "33752yAGdC6ofRZlEHsnx9" 1159 | }, 1160 | { 1161 | "__type__": "cc.Sprite", 1162 | "_name": "", 1163 | "_objFlags": 0, 1164 | "node": { 1165 | "__id__": 21 1166 | }, 1167 | "_enabled": true, 1168 | "_materials": [ 1169 | null 1170 | ], 1171 | "_srcBlendFactor": 770, 1172 | "_dstBlendFactor": 771, 1173 | "_spriteFrame": { 1174 | "__uuid__": "79900e22-f1e4-4f8f-9a27-033142cd41ce" 1175 | }, 1176 | "_type": 0, 1177 | "_sizeMode": 0, 1178 | "_fillType": 0, 1179 | "_fillCenter": { 1180 | "__type__": "cc.Vec2", 1181 | "x": 0, 1182 | "y": 0 1183 | }, 1184 | "_fillStart": 0, 1185 | "_fillRange": 0, 1186 | "_isTrimmedMode": true, 1187 | "_atlas": null, 1188 | "_id": "3dtt9EGGNKvZ0BBbDoaQwQ" 1189 | }, 1190 | { 1191 | "__type__": "5866cn/yXtO664c25gnwSdk", 1192 | "_name": "", 1193 | "_objFlags": 0, 1194 | "node": { 1195 | "__id__": 21 1196 | }, 1197 | "_enabled": true, 1198 | "_max": 1, 1199 | "_id": "076rFmH9ZGfY17gytQtpR4" 1200 | }, 1201 | { 1202 | "__type__": "cc.Node", 1203 | "_name": "image", 1204 | "_objFlags": 0, 1205 | "_parent": { 1206 | "__id__": 13 1207 | }, 1208 | "_children": [ 1209 | { 1210 | "__id__": 29 1211 | } 1212 | ], 1213 | "_active": true, 1214 | "_level": 2, 1215 | "_components": [ 1216 | { 1217 | "__id__": 33 1218 | }, 1219 | { 1220 | "__id__": 32 1221 | }, 1222 | { 1223 | "__id__": 34 1224 | } 1225 | ], 1226 | "_prefab": null, 1227 | "_opacity": 255, 1228 | "_color": { 1229 | "__type__": "cc.Color", 1230 | "r": 255, 1231 | "g": 255, 1232 | "b": 255, 1233 | "a": 255 1234 | }, 1235 | "_contentSize": { 1236 | "__type__": "cc.Size", 1237 | "width": 400, 1238 | "height": 250 1239 | }, 1240 | "_anchorPoint": { 1241 | "__type__": "cc.Vec2", 1242 | "x": 0.5, 1243 | "y": 0.5 1244 | }, 1245 | "_position": { 1246 | "__type__": "cc.Vec3", 1247 | "x": 447.8, 1248 | "y": 508, 1249 | "z": 0 1250 | }, 1251 | "_scale": { 1252 | "__type__": "cc.Vec3", 1253 | "x": 1, 1254 | "y": 1, 1255 | "z": 1 1256 | }, 1257 | "_eulerAngles": { 1258 | "__type__": "cc.Vec3", 1259 | "x": 0, 1260 | "y": 0, 1261 | "z": 0 1262 | }, 1263 | "_skewX": 0, 1264 | "_skewY": 0, 1265 | "_is3DNode": false, 1266 | "groupIndex": 0, 1267 | "_id": "04hBp9qntNBpRei5uovqDn" 1268 | }, 1269 | { 1270 | "__type__": "cc.Node", 1271 | "_name": "Label", 1272 | "_objFlags": 0, 1273 | "_parent": { 1274 | "__id__": 28 1275 | }, 1276 | "_children": [], 1277 | "_active": true, 1278 | "_level": 3, 1279 | "_components": [ 1280 | { 1281 | "__id__": 30 1282 | }, 1283 | { 1284 | "__id__": 31 1285 | } 1286 | ], 1287 | "_prefab": null, 1288 | "_opacity": 255, 1289 | "_color": { 1290 | "__type__": "cc.Color", 1291 | "r": 255, 1292 | "g": 255, 1293 | "b": 255, 1294 | "a": 255 1295 | }, 1296 | "_contentSize": { 1297 | "__type__": "cc.Size", 1298 | "width": 224.55, 1299 | "height": 50.4 1300 | }, 1301 | "_anchorPoint": { 1302 | "__type__": "cc.Vec2", 1303 | "x": 0.5, 1304 | "y": 0.5 1305 | }, 1306 | "_position": { 1307 | "__type__": "cc.Vec3", 1308 | "x": 0, 1309 | "y": 0, 1310 | "z": 0 1311 | }, 1312 | "_scale": { 1313 | "__type__": "cc.Vec3", 1314 | "x": 1, 1315 | "y": 1, 1316 | "z": 1 1317 | }, 1318 | "_eulerAngles": { 1319 | "__type__": "cc.Vec3", 1320 | "x": 0, 1321 | "y": 0, 1322 | "z": 0 1323 | }, 1324 | "_skewX": 0, 1325 | "_skewY": 0, 1326 | "_is3DNode": false, 1327 | "groupIndex": 0, 1328 | "_id": "bbRlPdyg9JIoXK1u7dUXOC" 1329 | }, 1330 | { 1331 | "__type__": "cc.Label", 1332 | "_name": "", 1333 | "_objFlags": 0, 1334 | "node": { 1335 | "__id__": 29 1336 | }, 1337 | "_enabled": true, 1338 | "_materials": [ 1339 | { 1340 | "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" 1341 | } 1342 | ], 1343 | "_useOriginalSize": false, 1344 | "_string": "FluxaySuper", 1345 | "_N$string": "FluxaySuper", 1346 | "_fontSize": 40, 1347 | "_lineHeight": 40, 1348 | "_enableWrapText": true, 1349 | "_N$file": null, 1350 | "_isSystemFontUsed": true, 1351 | "_spacingX": 0, 1352 | "_batchAsBitmap": false, 1353 | "_N$horizontalAlign": 1, 1354 | "_N$verticalAlign": 1, 1355 | "_N$fontFamily": "Arial", 1356 | "_N$overflow": 0, 1357 | "_N$cacheMode": 0, 1358 | "_id": "c5VKRISHBJQoXi0rgq8Z12" 1359 | }, 1360 | { 1361 | "__type__": "4cd0ffQe75Ddod5dqnEgLHx", 1362 | "_name": "", 1363 | "_objFlags": 0, 1364 | "node": { 1365 | "__id__": 29 1366 | }, 1367 | "_enabled": true, 1368 | "shaderHelper": { 1369 | "__id__": 32 1370 | }, 1371 | "_id": "623bvv1d1I3YJJrQSZwVBm" 1372 | }, 1373 | { 1374 | "__type__": "49d0auleM9GkaUgf+inMFoR", 1375 | "_name": "", 1376 | "_objFlags": 0, 1377 | "node": { 1378 | "__id__": 28 1379 | }, 1380 | "_enabled": true, 1381 | "_program": 6, 1382 | "_props": [], 1383 | "_id": "7dxGBgZS5Bpb64LaSKQtQu" 1384 | }, 1385 | { 1386 | "__type__": "cc.Sprite", 1387 | "_name": "", 1388 | "_objFlags": 0, 1389 | "node": { 1390 | "__id__": 28 1391 | }, 1392 | "_enabled": true, 1393 | "_materials": [ 1394 | null 1395 | ], 1396 | "_srcBlendFactor": 770, 1397 | "_dstBlendFactor": 771, 1398 | "_spriteFrame": { 1399 | "__uuid__": "79900e22-f1e4-4f8f-9a27-033142cd41ce" 1400 | }, 1401 | "_type": 0, 1402 | "_sizeMode": 0, 1403 | "_fillType": 0, 1404 | "_fillCenter": { 1405 | "__type__": "cc.Vec2", 1406 | "x": 0, 1407 | "y": 0 1408 | }, 1409 | "_fillStart": 0, 1410 | "_fillRange": 0, 1411 | "_isTrimmedMode": true, 1412 | "_atlas": null, 1413 | "_id": "6aErpk9+tCPa/kIHuw3UHB" 1414 | }, 1415 | { 1416 | "__type__": "5866cn/yXtO664c25gnwSdk", 1417 | "_name": "", 1418 | "_objFlags": 0, 1419 | "node": { 1420 | "__id__": 28 1421 | }, 1422 | "_enabled": true, 1423 | "_max": 65535, 1424 | "_id": "418QkZtP5B4qFskaAcCyoO" 1425 | }, 1426 | { 1427 | "__type__": "cc.Node", 1428 | "_name": "image", 1429 | "_objFlags": 0, 1430 | "_parent": { 1431 | "__id__": 13 1432 | }, 1433 | "_children": [ 1434 | { 1435 | "__id__": 36 1436 | } 1437 | ], 1438 | "_active": true, 1439 | "_level": 2, 1440 | "_components": [ 1441 | { 1442 | "__id__": 40 1443 | }, 1444 | { 1445 | "__id__": 39 1446 | }, 1447 | { 1448 | "__id__": 41 1449 | } 1450 | ], 1451 | "_prefab": null, 1452 | "_opacity": 255, 1453 | "_color": { 1454 | "__type__": "cc.Color", 1455 | "r": 255, 1456 | "g": 255, 1457 | "b": 255, 1458 | "a": 255 1459 | }, 1460 | "_contentSize": { 1461 | "__type__": "cc.Size", 1462 | "width": 400, 1463 | "height": 250 1464 | }, 1465 | "_anchorPoint": { 1466 | "__type__": "cc.Vec2", 1467 | "x": 0.5, 1468 | "y": 0.5 1469 | }, 1470 | "_position": { 1471 | "__type__": "cc.Vec3", 1472 | "x": -463, 1473 | "y": 254, 1474 | "z": 0 1475 | }, 1476 | "_scale": { 1477 | "__type__": "cc.Vec3", 1478 | "x": 1, 1479 | "y": 1, 1480 | "z": 1 1481 | }, 1482 | "_eulerAngles": { 1483 | "__type__": "cc.Vec3", 1484 | "x": 0, 1485 | "y": 0, 1486 | "z": 0 1487 | }, 1488 | "_skewX": 0, 1489 | "_skewY": 0, 1490 | "_is3DNode": false, 1491 | "groupIndex": 0, 1492 | "_id": "9dAa3VPmJEO7Yn6ee6h+8l" 1493 | }, 1494 | { 1495 | "__type__": "cc.Node", 1496 | "_name": "Label", 1497 | "_objFlags": 0, 1498 | "_parent": { 1499 | "__id__": 35 1500 | }, 1501 | "_children": [], 1502 | "_active": true, 1503 | "_level": 3, 1504 | "_components": [ 1505 | { 1506 | "__id__": 37 1507 | }, 1508 | { 1509 | "__id__": 38 1510 | } 1511 | ], 1512 | "_prefab": null, 1513 | "_opacity": 255, 1514 | "_color": { 1515 | "__type__": "cc.Color", 1516 | "r": 255, 1517 | "g": 255, 1518 | "b": 255, 1519 | "a": 255 1520 | }, 1521 | "_contentSize": { 1522 | "__type__": "cc.Size", 1523 | "width": 82.27, 1524 | "height": 50.4 1525 | }, 1526 | "_anchorPoint": { 1527 | "__type__": "cc.Vec2", 1528 | "x": 0.5, 1529 | "y": 0.5 1530 | }, 1531 | "_position": { 1532 | "__type__": "cc.Vec3", 1533 | "x": 0, 1534 | "y": 0, 1535 | "z": 0 1536 | }, 1537 | "_scale": { 1538 | "__type__": "cc.Vec3", 1539 | "x": 1, 1540 | "y": 1, 1541 | "z": 1 1542 | }, 1543 | "_eulerAngles": { 1544 | "__type__": "cc.Vec3", 1545 | "x": 0, 1546 | "y": 0, 1547 | "z": 0 1548 | }, 1549 | "_skewX": 0, 1550 | "_skewY": 0, 1551 | "_is3DNode": false, 1552 | "groupIndex": 0, 1553 | "_id": "a8H/IcfFFLw5UbiO+ptMdL" 1554 | }, 1555 | { 1556 | "__type__": "cc.Label", 1557 | "_name": "", 1558 | "_objFlags": 0, 1559 | "node": { 1560 | "__id__": 36 1561 | }, 1562 | "_enabled": true, 1563 | "_materials": [ 1564 | { 1565 | "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" 1566 | } 1567 | ], 1568 | "_useOriginalSize": false, 1569 | "_string": "Rain", 1570 | "_N$string": "Rain", 1571 | "_fontSize": 40, 1572 | "_lineHeight": 40, 1573 | "_enableWrapText": true, 1574 | "_N$file": null, 1575 | "_isSystemFontUsed": true, 1576 | "_spacingX": 0, 1577 | "_batchAsBitmap": false, 1578 | "_N$horizontalAlign": 1, 1579 | "_N$verticalAlign": 1, 1580 | "_N$fontFamily": "Arial", 1581 | "_N$overflow": 0, 1582 | "_N$cacheMode": 0, 1583 | "_id": "6fCXqgh4lLQZSEHOfBUdYF" 1584 | }, 1585 | { 1586 | "__type__": "4cd0ffQe75Ddod5dqnEgLHx", 1587 | "_name": "", 1588 | "_objFlags": 0, 1589 | "node": { 1590 | "__id__": 36 1591 | }, 1592 | "_enabled": true, 1593 | "shaderHelper": { 1594 | "__id__": 39 1595 | }, 1596 | "_id": "61blGS+qxKjYWl708fYOoY" 1597 | }, 1598 | { 1599 | "__type__": "49d0auleM9GkaUgf+inMFoR", 1600 | "_name": "", 1601 | "_objFlags": 0, 1602 | "node": { 1603 | "__id__": 35 1604 | }, 1605 | "_enabled": true, 1606 | "_program": 11, 1607 | "_props": [], 1608 | "_id": "30tlp8Xo1H2ZmpFlQ7bpJC" 1609 | }, 1610 | { 1611 | "__type__": "cc.Sprite", 1612 | "_name": "", 1613 | "_objFlags": 0, 1614 | "node": { 1615 | "__id__": 35 1616 | }, 1617 | "_enabled": true, 1618 | "_materials": [ 1619 | null 1620 | ], 1621 | "_srcBlendFactor": 770, 1622 | "_dstBlendFactor": 771, 1623 | "_spriteFrame": { 1624 | "__uuid__": "79900e22-f1e4-4f8f-9a27-033142cd41ce" 1625 | }, 1626 | "_type": 0, 1627 | "_sizeMode": 0, 1628 | "_fillType": 0, 1629 | "_fillCenter": { 1630 | "__type__": "cc.Vec2", 1631 | "x": 0, 1632 | "y": 0 1633 | }, 1634 | "_fillStart": 0, 1635 | "_fillRange": 0, 1636 | "_isTrimmedMode": true, 1637 | "_atlas": null, 1638 | "_id": "aezAaC1nBG2IoLOnEF67Ex" 1639 | }, 1640 | { 1641 | "__type__": "5866cn/yXtO664c25gnwSdk", 1642 | "_name": "", 1643 | "_objFlags": 0, 1644 | "node": { 1645 | "__id__": 35 1646 | }, 1647 | "_enabled": true, 1648 | "_max": 65535, 1649 | "_id": "41XCexxlVFBalkqgEQxm7o" 1650 | }, 1651 | { 1652 | "__type__": "cc.Node", 1653 | "_name": "image", 1654 | "_objFlags": 0, 1655 | "_parent": { 1656 | "__id__": 13 1657 | }, 1658 | "_children": [ 1659 | { 1660 | "__id__": 43 1661 | } 1662 | ], 1663 | "_active": true, 1664 | "_level": 2, 1665 | "_components": [ 1666 | { 1667 | "__id__": 47 1668 | }, 1669 | { 1670 | "__id__": 46 1671 | }, 1672 | { 1673 | "__id__": 48 1674 | } 1675 | ], 1676 | "_prefab": null, 1677 | "_opacity": 255, 1678 | "_color": { 1679 | "__type__": "cc.Color", 1680 | "r": 255, 1681 | "g": 255, 1682 | "b": 255, 1683 | "a": 255 1684 | }, 1685 | "_contentSize": { 1686 | "__type__": "cc.Size", 1687 | "width": 400, 1688 | "height": 250 1689 | }, 1690 | "_anchorPoint": { 1691 | "__type__": "cc.Vec2", 1692 | "x": 0.5, 1693 | "y": 0.5 1694 | }, 1695 | "_position": { 1696 | "__type__": "cc.Vec3", 1697 | "x": -7.599999999999952, 1698 | "y": 254, 1699 | "z": 0 1700 | }, 1701 | "_scale": { 1702 | "__type__": "cc.Vec3", 1703 | "x": 1, 1704 | "y": 1, 1705 | "z": 1 1706 | }, 1707 | "_eulerAngles": { 1708 | "__type__": "cc.Vec3", 1709 | "x": 0, 1710 | "y": 0, 1711 | "z": 0 1712 | }, 1713 | "_skewX": 0, 1714 | "_skewY": 0, 1715 | "_is3DNode": false, 1716 | "groupIndex": 0, 1717 | "_id": "2ceiCo/0tHRLkfX7rbhO8c" 1718 | }, 1719 | { 1720 | "__type__": "cc.Node", 1721 | "_name": "Label", 1722 | "_objFlags": 0, 1723 | "_parent": { 1724 | "__id__": 42 1725 | }, 1726 | "_children": [], 1727 | "_active": true, 1728 | "_level": 3, 1729 | "_components": [ 1730 | { 1731 | "__id__": 44 1732 | }, 1733 | { 1734 | "__id__": 45 1735 | } 1736 | ], 1737 | "_prefab": null, 1738 | "_opacity": 255, 1739 | "_color": { 1740 | "__type__": "cc.Color", 1741 | "r": 255, 1742 | "g": 255, 1743 | "b": 255, 1744 | "a": 255 1745 | }, 1746 | "_contentSize": { 1747 | "__type__": "cc.Size", 1748 | "width": 105.2, 1749 | "height": 50.4 1750 | }, 1751 | "_anchorPoint": { 1752 | "__type__": "cc.Vec2", 1753 | "x": 0.5, 1754 | "y": 0.5 1755 | }, 1756 | "_position": { 1757 | "__type__": "cc.Vec3", 1758 | "x": 0, 1759 | "y": 0, 1760 | "z": 0 1761 | }, 1762 | "_scale": { 1763 | "__type__": "cc.Vec3", 1764 | "x": 1, 1765 | "y": 1, 1766 | "z": 1 1767 | }, 1768 | "_eulerAngles": { 1769 | "__type__": "cc.Vec3", 1770 | "x": 0, 1771 | "y": 0, 1772 | "z": 0 1773 | }, 1774 | "_skewX": 0, 1775 | "_skewY": 0, 1776 | "_is3DNode": false, 1777 | "groupIndex": 0, 1778 | "_id": "e7aTQwS+5LXJ/CPquiXwbA" 1779 | }, 1780 | { 1781 | "__type__": "cc.Label", 1782 | "_name": "", 1783 | "_objFlags": 0, 1784 | "node": { 1785 | "__id__": 43 1786 | }, 1787 | "_enabled": true, 1788 | "_materials": [ 1789 | { 1790 | "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" 1791 | } 1792 | ], 1793 | "_useOriginalSize": false, 1794 | "_string": "Water", 1795 | "_N$string": "Water", 1796 | "_fontSize": 40, 1797 | "_lineHeight": 40, 1798 | "_enableWrapText": true, 1799 | "_N$file": null, 1800 | "_isSystemFontUsed": true, 1801 | "_spacingX": 0, 1802 | "_batchAsBitmap": false, 1803 | "_N$horizontalAlign": 1, 1804 | "_N$verticalAlign": 1, 1805 | "_N$fontFamily": "Arial", 1806 | "_N$overflow": 0, 1807 | "_N$cacheMode": 0, 1808 | "_id": "96iBI3F0RNuYLOA8n3KJre" 1809 | }, 1810 | { 1811 | "__type__": "4cd0ffQe75Ddod5dqnEgLHx", 1812 | "_name": "", 1813 | "_objFlags": 0, 1814 | "node": { 1815 | "__id__": 43 1816 | }, 1817 | "_enabled": true, 1818 | "shaderHelper": { 1819 | "__id__": 46 1820 | }, 1821 | "_id": "64777ItN1Go6VHBMkeSq0+" 1822 | }, 1823 | { 1824 | "__type__": "49d0auleM9GkaUgf+inMFoR", 1825 | "_name": "", 1826 | "_objFlags": 0, 1827 | "node": { 1828 | "__id__": 42 1829 | }, 1830 | "_enabled": true, 1831 | "_program": 14, 1832 | "_props": [], 1833 | "_id": "ba2TW14B5FKKd0OVX4se8d" 1834 | }, 1835 | { 1836 | "__type__": "cc.Sprite", 1837 | "_name": "", 1838 | "_objFlags": 0, 1839 | "node": { 1840 | "__id__": 42 1841 | }, 1842 | "_enabled": true, 1843 | "_materials": [ 1844 | null 1845 | ], 1846 | "_srcBlendFactor": 770, 1847 | "_dstBlendFactor": 771, 1848 | "_spriteFrame": { 1849 | "__uuid__": "7e43fd5c-4bee-469e-890b-75e0b17f2063" 1850 | }, 1851 | "_type": 0, 1852 | "_sizeMode": 0, 1853 | "_fillType": 0, 1854 | "_fillCenter": { 1855 | "__type__": "cc.Vec2", 1856 | "x": 0, 1857 | "y": 0 1858 | }, 1859 | "_fillStart": 0, 1860 | "_fillRange": 0, 1861 | "_isTrimmedMode": true, 1862 | "_atlas": null, 1863 | "_id": "80h/XGVXFD75xVs3ymp4qD" 1864 | }, 1865 | { 1866 | "__type__": "5866cn/yXtO664c25gnwSdk", 1867 | "_name": "", 1868 | "_objFlags": 0, 1869 | "node": { 1870 | "__id__": 42 1871 | }, 1872 | "_enabled": true, 1873 | "_max": 65535, 1874 | "_id": "b8JUNmmThOpIuUy5iL1Y1g" 1875 | }, 1876 | { 1877 | "__type__": "cc.Node", 1878 | "_name": "image", 1879 | "_objFlags": 0, 1880 | "_parent": { 1881 | "__id__": 13 1882 | }, 1883 | "_children": [ 1884 | { 1885 | "__id__": 50 1886 | } 1887 | ], 1888 | "_active": true, 1889 | "_level": 2, 1890 | "_components": [ 1891 | { 1892 | "__id__": 54 1893 | }, 1894 | { 1895 | "__id__": 53 1896 | } 1897 | ], 1898 | "_prefab": null, 1899 | "_opacity": 255, 1900 | "_color": { 1901 | "__type__": "cc.Color", 1902 | "r": 255, 1903 | "g": 255, 1904 | "b": 255, 1905 | "a": 255 1906 | }, 1907 | "_contentSize": { 1908 | "__type__": "cc.Size", 1909 | "width": 400, 1910 | "height": 250 1911 | }, 1912 | "_anchorPoint": { 1913 | "__type__": "cc.Vec2", 1914 | "x": 0.5, 1915 | "y": 0.5 1916 | }, 1917 | "_position": { 1918 | "__type__": "cc.Vec3", 1919 | "x": 447.80000000000007, 1920 | "y": 254, 1921 | "z": 0 1922 | }, 1923 | "_scale": { 1924 | "__type__": "cc.Vec3", 1925 | "x": 1, 1926 | "y": 1, 1927 | "z": 1 1928 | }, 1929 | "_eulerAngles": { 1930 | "__type__": "cc.Vec3", 1931 | "x": 0, 1932 | "y": 0, 1933 | "z": 0 1934 | }, 1935 | "_skewX": 0, 1936 | "_skewY": 0, 1937 | "_is3DNode": false, 1938 | "groupIndex": 0, 1939 | "_id": "0d7+mr1OxOPKwypjHBw09I" 1940 | }, 1941 | { 1942 | "__type__": "cc.Node", 1943 | "_name": "Label", 1944 | "_objFlags": 0, 1945 | "_parent": { 1946 | "__id__": 49 1947 | }, 1948 | "_children": [], 1949 | "_active": true, 1950 | "_level": 3, 1951 | "_components": [ 1952 | { 1953 | "__id__": 51 1954 | }, 1955 | { 1956 | "__id__": 52 1957 | } 1958 | ], 1959 | "_prefab": null, 1960 | "_opacity": 255, 1961 | "_color": { 1962 | "__type__": "cc.Color", 1963 | "r": 255, 1964 | "g": 255, 1965 | "b": 255, 1966 | "a": 255 1967 | }, 1968 | "_contentSize": { 1969 | "__type__": "cc.Size", 1970 | "width": 71.13, 1971 | "height": 50.4 1972 | }, 1973 | "_anchorPoint": { 1974 | "__type__": "cc.Vec2", 1975 | "x": 0.5, 1976 | "y": 0.5 1977 | }, 1978 | "_position": { 1979 | "__type__": "cc.Vec3", 1980 | "x": 0, 1981 | "y": 0, 1982 | "z": 0 1983 | }, 1984 | "_scale": { 1985 | "__type__": "cc.Vec3", 1986 | "x": 1, 1987 | "y": 1, 1988 | "z": 1 1989 | }, 1990 | "_eulerAngles": { 1991 | "__type__": "cc.Vec3", 1992 | "x": 0, 1993 | "y": 0, 1994 | "z": 0 1995 | }, 1996 | "_skewX": 0, 1997 | "_skewY": 0, 1998 | "_is3DNode": false, 1999 | "groupIndex": 0, 2000 | "_id": "5dAFhUHStIELD7kmE6KmwA" 2001 | }, 2002 | { 2003 | "__type__": "cc.Label", 2004 | "_name": "", 2005 | "_objFlags": 0, 2006 | "node": { 2007 | "__id__": 50 2008 | }, 2009 | "_enabled": true, 2010 | "_materials": [ 2011 | { 2012 | "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" 2013 | } 2014 | ], 2015 | "_useOriginalSize": false, 2016 | "_string": "Blur", 2017 | "_N$string": "Blur", 2018 | "_fontSize": 40, 2019 | "_lineHeight": 40, 2020 | "_enableWrapText": true, 2021 | "_N$file": null, 2022 | "_isSystemFontUsed": true, 2023 | "_spacingX": 0, 2024 | "_batchAsBitmap": false, 2025 | "_N$horizontalAlign": 1, 2026 | "_N$verticalAlign": 1, 2027 | "_N$fontFamily": "Arial", 2028 | "_N$overflow": 0, 2029 | "_N$cacheMode": 0, 2030 | "_id": "16qNufaz1Nh4QiosoCpLru" 2031 | }, 2032 | { 2033 | "__type__": "4cd0ffQe75Ddod5dqnEgLHx", 2034 | "_name": "", 2035 | "_objFlags": 0, 2036 | "node": { 2037 | "__id__": 50 2038 | }, 2039 | "_enabled": true, 2040 | "shaderHelper": { 2041 | "__id__": 53 2042 | }, 2043 | "_id": "112R1vGYJC4K1SWXUtvy+T" 2044 | }, 2045 | { 2046 | "__type__": "49d0auleM9GkaUgf+inMFoR", 2047 | "_name": "", 2048 | "_objFlags": 0, 2049 | "node": { 2050 | "__id__": 49 2051 | }, 2052 | "_enabled": true, 2053 | "_program": 0, 2054 | "_props": [], 2055 | "_id": "73zdoiD2RBG6tGg1Ia2E/Y" 2056 | }, 2057 | { 2058 | "__type__": "cc.Sprite", 2059 | "_name": "", 2060 | "_objFlags": 0, 2061 | "node": { 2062 | "__id__": 49 2063 | }, 2064 | "_enabled": true, 2065 | "_materials": [ 2066 | null 2067 | ], 2068 | "_srcBlendFactor": 770, 2069 | "_dstBlendFactor": 771, 2070 | "_spriteFrame": { 2071 | "__uuid__": "79900e22-f1e4-4f8f-9a27-033142cd41ce" 2072 | }, 2073 | "_type": 0, 2074 | "_sizeMode": 0, 2075 | "_fillType": 0, 2076 | "_fillCenter": { 2077 | "__type__": "cc.Vec2", 2078 | "x": 0, 2079 | "y": 0 2080 | }, 2081 | "_fillStart": 0, 2082 | "_fillRange": 0, 2083 | "_isTrimmedMode": true, 2084 | "_atlas": null, 2085 | "_id": "abEUEoVV5NbZsFxaVJmgE7" 2086 | }, 2087 | { 2088 | "__type__": "cc.Node", 2089 | "_name": "image", 2090 | "_objFlags": 0, 2091 | "_parent": { 2092 | "__id__": 13 2093 | }, 2094 | "_children": [ 2095 | { 2096 | "__id__": 56 2097 | } 2098 | ], 2099 | "_active": true, 2100 | "_level": 2, 2101 | "_components": [ 2102 | { 2103 | "__id__": 60 2104 | }, 2105 | { 2106 | "__id__": 59 2107 | } 2108 | ], 2109 | "_prefab": null, 2110 | "_opacity": 255, 2111 | "_color": { 2112 | "__type__": "cc.Color", 2113 | "r": 255, 2114 | "g": 255, 2115 | "b": 255, 2116 | "a": 255 2117 | }, 2118 | "_contentSize": { 2119 | "__type__": "cc.Size", 2120 | "width": 400, 2121 | "height": 250 2122 | }, 2123 | "_anchorPoint": { 2124 | "__type__": "cc.Vec2", 2125 | "x": 0.5, 2126 | "y": 0.5 2127 | }, 2128 | "_position": { 2129 | "__type__": "cc.Vec3", 2130 | "x": -463, 2131 | "y": 0, 2132 | "z": 0 2133 | }, 2134 | "_scale": { 2135 | "__type__": "cc.Vec3", 2136 | "x": 1, 2137 | "y": 1, 2138 | "z": 1 2139 | }, 2140 | "_eulerAngles": { 2141 | "__type__": "cc.Vec3", 2142 | "x": 0, 2143 | "y": 0, 2144 | "z": 0 2145 | }, 2146 | "_skewX": 0, 2147 | "_skewY": 0, 2148 | "_is3DNode": false, 2149 | "groupIndex": 0, 2150 | "_id": "e4YsSsnp1CuqTCS1QhZYGV" 2151 | }, 2152 | { 2153 | "__type__": "cc.Node", 2154 | "_name": "Label", 2155 | "_objFlags": 0, 2156 | "_parent": { 2157 | "__id__": 55 2158 | }, 2159 | "_children": [], 2160 | "_active": true, 2161 | "_level": 3, 2162 | "_components": [ 2163 | { 2164 | "__id__": 57 2165 | }, 2166 | { 2167 | "__id__": 58 2168 | } 2169 | ], 2170 | "_prefab": null, 2171 | "_opacity": 255, 2172 | "_color": { 2173 | "__type__": "cc.Color", 2174 | "r": 255, 2175 | "g": 255, 2176 | "b": 255, 2177 | "a": 255 2178 | }, 2179 | "_contentSize": { 2180 | "__type__": "cc.Size", 2181 | "width": 231.15, 2182 | "height": 50.4 2183 | }, 2184 | "_anchorPoint": { 2185 | "__type__": "cc.Vec2", 2186 | "x": 0.5, 2187 | "y": 0.5 2188 | }, 2189 | "_position": { 2190 | "__type__": "cc.Vec3", 2191 | "x": 0, 2192 | "y": 0, 2193 | "z": 0 2194 | }, 2195 | "_scale": { 2196 | "__type__": "cc.Vec3", 2197 | "x": 1, 2198 | "y": 1, 2199 | "z": 1 2200 | }, 2201 | "_eulerAngles": { 2202 | "__type__": "cc.Vec3", 2203 | "x": 0, 2204 | "y": 0, 2205 | "z": 0 2206 | }, 2207 | "_skewX": 0, 2208 | "_skewY": 0, 2209 | "_is3DNode": false, 2210 | "groupIndex": 0, 2211 | "_id": "9d7hIW6plA0YOBoKOtx1Od" 2212 | }, 2213 | { 2214 | "__type__": "cc.Label", 2215 | "_name": "", 2216 | "_objFlags": 0, 2217 | "node": { 2218 | "__id__": 56 2219 | }, 2220 | "_enabled": true, 2221 | "_materials": [ 2222 | { 2223 | "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" 2224 | } 2225 | ], 2226 | "_useOriginalSize": false, 2227 | "_string": "CirclePortrait", 2228 | "_N$string": "CirclePortrait", 2229 | "_fontSize": 40, 2230 | "_lineHeight": 40, 2231 | "_enableWrapText": true, 2232 | "_N$file": null, 2233 | "_isSystemFontUsed": true, 2234 | "_spacingX": 0, 2235 | "_batchAsBitmap": false, 2236 | "_N$horizontalAlign": 1, 2237 | "_N$verticalAlign": 1, 2238 | "_N$fontFamily": "Arial", 2239 | "_N$overflow": 0, 2240 | "_N$cacheMode": 0, 2241 | "_id": "99eNZLIM9JR7XiwwLsumRh" 2242 | }, 2243 | { 2244 | "__type__": "4cd0ffQe75Ddod5dqnEgLHx", 2245 | "_name": "", 2246 | "_objFlags": 0, 2247 | "node": { 2248 | "__id__": 56 2249 | }, 2250 | "_enabled": true, 2251 | "shaderHelper": { 2252 | "__id__": 59 2253 | }, 2254 | "_id": "125PteuXVCpK9Br5HrVZAC" 2255 | }, 2256 | { 2257 | "__type__": "49d0auleM9GkaUgf+inMFoR", 2258 | "_name": "", 2259 | "_objFlags": 0, 2260 | "node": { 2261 | "__id__": 55 2262 | }, 2263 | "_enabled": true, 2264 | "_program": 2, 2265 | "_props": [], 2266 | "_id": "11ibeuXOtFJZSN2Nym+dDw" 2267 | }, 2268 | { 2269 | "__type__": "cc.Sprite", 2270 | "_name": "", 2271 | "_objFlags": 0, 2272 | "node": { 2273 | "__id__": 55 2274 | }, 2275 | "_enabled": true, 2276 | "_materials": [ 2277 | null 2278 | ], 2279 | "_srcBlendFactor": 770, 2280 | "_dstBlendFactor": 771, 2281 | "_spriteFrame": { 2282 | "__uuid__": "79900e22-f1e4-4f8f-9a27-033142cd41ce" 2283 | }, 2284 | "_type": 0, 2285 | "_sizeMode": 0, 2286 | "_fillType": 0, 2287 | "_fillCenter": { 2288 | "__type__": "cc.Vec2", 2289 | "x": 0, 2290 | "y": 0 2291 | }, 2292 | "_fillStart": 0, 2293 | "_fillRange": 0, 2294 | "_isTrimmedMode": true, 2295 | "_atlas": null, 2296 | "_id": "b0I+Q4xXNNuaXP3j/ZRbuZ" 2297 | }, 2298 | { 2299 | "__type__": "cc.Node", 2300 | "_name": "image", 2301 | "_objFlags": 0, 2302 | "_parent": { 2303 | "__id__": 13 2304 | }, 2305 | "_children": [ 2306 | { 2307 | "__id__": 62 2308 | } 2309 | ], 2310 | "_active": true, 2311 | "_level": 2, 2312 | "_components": [ 2313 | { 2314 | "__id__": 66 2315 | }, 2316 | { 2317 | "__id__": 65 2318 | }, 2319 | { 2320 | "__id__": 67 2321 | } 2322 | ], 2323 | "_prefab": null, 2324 | "_opacity": 255, 2325 | "_color": { 2326 | "__type__": "cc.Color", 2327 | "r": 255, 2328 | "g": 255, 2329 | "b": 255, 2330 | "a": 255 2331 | }, 2332 | "_contentSize": { 2333 | "__type__": "cc.Size", 2334 | "width": 400, 2335 | "height": 250 2336 | }, 2337 | "_anchorPoint": { 2338 | "__type__": "cc.Vec2", 2339 | "x": 0.5, 2340 | "y": 0.5 2341 | }, 2342 | "_position": { 2343 | "__type__": "cc.Vec3", 2344 | "x": -7.599999999999952, 2345 | "y": 0, 2346 | "z": 0 2347 | }, 2348 | "_scale": { 2349 | "__type__": "cc.Vec3", 2350 | "x": 1, 2351 | "y": 1, 2352 | "z": 1 2353 | }, 2354 | "_eulerAngles": { 2355 | "__type__": "cc.Vec3", 2356 | "x": 0, 2357 | "y": 0, 2358 | "z": 0 2359 | }, 2360 | "_skewX": 0, 2361 | "_skewY": 0, 2362 | "_is3DNode": false, 2363 | "groupIndex": 0, 2364 | "_id": "64BJl5D0BI1pdQKwilp/z6" 2365 | }, 2366 | { 2367 | "__type__": "cc.Node", 2368 | "_name": "Label", 2369 | "_objFlags": 0, 2370 | "_parent": { 2371 | "__id__": 61 2372 | }, 2373 | "_children": [], 2374 | "_active": true, 2375 | "_level": 3, 2376 | "_components": [ 2377 | { 2378 | "__id__": 63 2379 | }, 2380 | { 2381 | "__id__": 64 2382 | } 2383 | ], 2384 | "_prefab": null, 2385 | "_opacity": 255, 2386 | "_color": { 2387 | "__type__": "cc.Color", 2388 | "r": 255, 2389 | "g": 255, 2390 | "b": 255, 2391 | "a": 255 2392 | }, 2393 | "_contentSize": { 2394 | "__type__": "cc.Size", 2395 | "width": 117.81, 2396 | "height": 50.4 2397 | }, 2398 | "_anchorPoint": { 2399 | "__type__": "cc.Vec2", 2400 | "x": 0.5, 2401 | "y": 0.5 2402 | }, 2403 | "_position": { 2404 | "__type__": "cc.Vec3", 2405 | "x": 0, 2406 | "y": 0, 2407 | "z": 0 2408 | }, 2409 | "_scale": { 2410 | "__type__": "cc.Vec3", 2411 | "x": 1, 2412 | "y": 1, 2413 | "z": 1 2414 | }, 2415 | "_eulerAngles": { 2416 | "__type__": "cc.Vec3", 2417 | "x": 0, 2418 | "y": 0, 2419 | "z": 0 2420 | }, 2421 | "_skewX": 0, 2422 | "_skewY": 0, 2423 | "_is3DNode": false, 2424 | "groupIndex": 0, 2425 | "_id": "36WhkO3cFBGpOy/TAXCHwO" 2426 | }, 2427 | { 2428 | "__type__": "cc.Label", 2429 | "_name": "", 2430 | "_objFlags": 0, 2431 | "node": { 2432 | "__id__": 62 2433 | }, 2434 | "_enabled": true, 2435 | "_materials": [ 2436 | { 2437 | "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" 2438 | } 2439 | ], 2440 | "_useOriginalSize": false, 2441 | "_string": "Fluxay", 2442 | "_N$string": "Fluxay", 2443 | "_fontSize": 40, 2444 | "_lineHeight": 40, 2445 | "_enableWrapText": true, 2446 | "_N$file": null, 2447 | "_isSystemFontUsed": true, 2448 | "_spacingX": 0, 2449 | "_batchAsBitmap": false, 2450 | "_N$horizontalAlign": 1, 2451 | "_N$verticalAlign": 1, 2452 | "_N$fontFamily": "Arial", 2453 | "_N$overflow": 0, 2454 | "_N$cacheMode": 0, 2455 | "_id": "2btIZrP45MgaJMnczBwEFX" 2456 | }, 2457 | { 2458 | "__type__": "4cd0ffQe75Ddod5dqnEgLHx", 2459 | "_name": "", 2460 | "_objFlags": 0, 2461 | "node": { 2462 | "__id__": 62 2463 | }, 2464 | "_enabled": true, 2465 | "shaderHelper": { 2466 | "__id__": 65 2467 | }, 2468 | "_id": "596UEnB61OSZ69k4GEwSBd" 2469 | }, 2470 | { 2471 | "__type__": "49d0auleM9GkaUgf+inMFoR", 2472 | "_name": "", 2473 | "_objFlags": 0, 2474 | "node": { 2475 | "__id__": 61 2476 | }, 2477 | "_enabled": true, 2478 | "_program": 4, 2479 | "_props": [], 2480 | "_id": "4fTSX/EQdN+Kh+IGe+LMMa" 2481 | }, 2482 | { 2483 | "__type__": "cc.Sprite", 2484 | "_name": "", 2485 | "_objFlags": 0, 2486 | "node": { 2487 | "__id__": 61 2488 | }, 2489 | "_enabled": true, 2490 | "_materials": [ 2491 | null 2492 | ], 2493 | "_srcBlendFactor": 770, 2494 | "_dstBlendFactor": 771, 2495 | "_spriteFrame": { 2496 | "__uuid__": "79900e22-f1e4-4f8f-9a27-033142cd41ce" 2497 | }, 2498 | "_type": 0, 2499 | "_sizeMode": 0, 2500 | "_fillType": 0, 2501 | "_fillCenter": { 2502 | "__type__": "cc.Vec2", 2503 | "x": 0, 2504 | "y": 0 2505 | }, 2506 | "_fillStart": 0, 2507 | "_fillRange": 0, 2508 | "_isTrimmedMode": true, 2509 | "_atlas": null, 2510 | "_id": "d5XIdxOAVJm4dBPMc5U6hD" 2511 | }, 2512 | { 2513 | "__type__": "5866cn/yXtO664c25gnwSdk", 2514 | "_name": "", 2515 | "_objFlags": 0, 2516 | "node": { 2517 | "__id__": 61 2518 | }, 2519 | "_enabled": true, 2520 | "_max": 65535, 2521 | "_id": "edx8jTGvVBRKMu+hEHM1iD" 2522 | }, 2523 | { 2524 | "__type__": "cc.Node", 2525 | "_name": "image", 2526 | "_objFlags": 0, 2527 | "_parent": { 2528 | "__id__": 13 2529 | }, 2530 | "_children": [ 2531 | { 2532 | "__id__": 69 2533 | } 2534 | ], 2535 | "_active": true, 2536 | "_level": 2, 2537 | "_components": [ 2538 | { 2539 | "__id__": 73 2540 | }, 2541 | { 2542 | "__id__": 72 2543 | } 2544 | ], 2545 | "_prefab": null, 2546 | "_opacity": 255, 2547 | "_color": { 2548 | "__type__": "cc.Color", 2549 | "r": 255, 2550 | "g": 255, 2551 | "b": 255, 2552 | "a": 255 2553 | }, 2554 | "_contentSize": { 2555 | "__type__": "cc.Size", 2556 | "width": 400, 2557 | "height": 250 2558 | }, 2559 | "_anchorPoint": { 2560 | "__type__": "cc.Vec2", 2561 | "x": 0.5, 2562 | "y": 0.5 2563 | }, 2564 | "_position": { 2565 | "__type__": "cc.Vec3", 2566 | "x": 447.80000000000007, 2567 | "y": 0, 2568 | "z": 0 2569 | }, 2570 | "_scale": { 2571 | "__type__": "cc.Vec3", 2572 | "x": 1, 2573 | "y": 1, 2574 | "z": 1 2575 | }, 2576 | "_eulerAngles": { 2577 | "__type__": "cc.Vec3", 2578 | "x": 0, 2579 | "y": 0, 2580 | "z": 0 2581 | }, 2582 | "_skewX": 0, 2583 | "_skewY": 0, 2584 | "_is3DNode": false, 2585 | "groupIndex": 0, 2586 | "_id": "32+Pj1SWBG049TMn3kk9+D" 2587 | }, 2588 | { 2589 | "__type__": "cc.Node", 2590 | "_name": "Label", 2591 | "_objFlags": 0, 2592 | "_parent": { 2593 | "__id__": 68 2594 | }, 2595 | "_children": [], 2596 | "_active": true, 2597 | "_level": 3, 2598 | "_components": [ 2599 | { 2600 | "__id__": 70 2601 | }, 2602 | { 2603 | "__id__": 71 2604 | } 2605 | ], 2606 | "_prefab": null, 2607 | "_opacity": 255, 2608 | "_color": { 2609 | "__type__": "cc.Color", 2610 | "r": 255, 2611 | "g": 255, 2612 | "b": 255, 2613 | "a": 255 2614 | }, 2615 | "_contentSize": { 2616 | "__type__": "cc.Size", 2617 | "width": 144.51, 2618 | "height": 50.4 2619 | }, 2620 | "_anchorPoint": { 2621 | "__type__": "cc.Vec2", 2622 | "x": 0.5, 2623 | "y": 0.5 2624 | }, 2625 | "_position": { 2626 | "__type__": "cc.Vec3", 2627 | "x": 0, 2628 | "y": 0, 2629 | "z": 0 2630 | }, 2631 | "_scale": { 2632 | "__type__": "cc.Vec3", 2633 | "x": 1, 2634 | "y": 1, 2635 | "z": 1 2636 | }, 2637 | "_eulerAngles": { 2638 | "__type__": "cc.Vec3", 2639 | "x": 0, 2640 | "y": 0, 2641 | "z": 0 2642 | }, 2643 | "_skewX": 0, 2644 | "_skewY": 0, 2645 | "_is3DNode": false, 2646 | "groupIndex": 0, 2647 | "_id": "065qYOkkNKOYbH5hfnlmUS" 2648 | }, 2649 | { 2650 | "__type__": "cc.Label", 2651 | "_name": "", 2652 | "_objFlags": 0, 2653 | "node": { 2654 | "__id__": 69 2655 | }, 2656 | "_enabled": true, 2657 | "_materials": [ 2658 | { 2659 | "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" 2660 | } 2661 | ], 2662 | "_useOriginalSize": false, 2663 | "_string": "Glowing", 2664 | "_N$string": "Glowing", 2665 | "_fontSize": 40, 2666 | "_lineHeight": 40, 2667 | "_enableWrapText": true, 2668 | "_N$file": null, 2669 | "_isSystemFontUsed": true, 2670 | "_spacingX": 0, 2671 | "_batchAsBitmap": false, 2672 | "_N$horizontalAlign": 1, 2673 | "_N$verticalAlign": 1, 2674 | "_N$fontFamily": "Arial", 2675 | "_N$overflow": 0, 2676 | "_N$cacheMode": 0, 2677 | "_id": "43PdgWEWtE7rC3LQnqTEjV" 2678 | }, 2679 | { 2680 | "__type__": "4cd0ffQe75Ddod5dqnEgLHx", 2681 | "_name": "", 2682 | "_objFlags": 0, 2683 | "node": { 2684 | "__id__": 69 2685 | }, 2686 | "_enabled": true, 2687 | "shaderHelper": { 2688 | "__id__": 72 2689 | }, 2690 | "_id": "7f4+eWWstPmLbEHbbZ2JNg" 2691 | }, 2692 | { 2693 | "__type__": "49d0auleM9GkaUgf+inMFoR", 2694 | "_name": "", 2695 | "_objFlags": 0, 2696 | "node": { 2697 | "__id__": 68 2698 | }, 2699 | "_enabled": true, 2700 | "_program": 7, 2701 | "_props": [], 2702 | "_id": "20oW5IooVDWJhHAt6XVUvw" 2703 | }, 2704 | { 2705 | "__type__": "cc.Sprite", 2706 | "_name": "", 2707 | "_objFlags": 0, 2708 | "node": { 2709 | "__id__": 68 2710 | }, 2711 | "_enabled": true, 2712 | "_materials": [ 2713 | null 2714 | ], 2715 | "_srcBlendFactor": 770, 2716 | "_dstBlendFactor": 771, 2717 | "_spriteFrame": { 2718 | "__uuid__": "79900e22-f1e4-4f8f-9a27-033142cd41ce" 2719 | }, 2720 | "_type": 0, 2721 | "_sizeMode": 0, 2722 | "_fillType": 0, 2723 | "_fillCenter": { 2724 | "__type__": "cc.Vec2", 2725 | "x": 0, 2726 | "y": 0 2727 | }, 2728 | "_fillStart": 0, 2729 | "_fillRange": 0, 2730 | "_isTrimmedMode": true, 2731 | "_atlas": null, 2732 | "_id": "6eWEb877tNn7Q21cykgQyO" 2733 | }, 2734 | { 2735 | "__type__": "cc.Node", 2736 | "_name": "image", 2737 | "_objFlags": 0, 2738 | "_parent": { 2739 | "__id__": 13 2740 | }, 2741 | "_children": [ 2742 | { 2743 | "__id__": 75 2744 | } 2745 | ], 2746 | "_active": true, 2747 | "_level": 2, 2748 | "_components": [ 2749 | { 2750 | "__id__": 79 2751 | }, 2752 | { 2753 | "__id__": 78 2754 | } 2755 | ], 2756 | "_prefab": null, 2757 | "_opacity": 255, 2758 | "_color": { 2759 | "__type__": "cc.Color", 2760 | "r": 255, 2761 | "g": 255, 2762 | "b": 255, 2763 | "a": 255 2764 | }, 2765 | "_contentSize": { 2766 | "__type__": "cc.Size", 2767 | "width": 400, 2768 | "height": 250 2769 | }, 2770 | "_anchorPoint": { 2771 | "__type__": "cc.Vec2", 2772 | "x": 0.5, 2773 | "y": 0.5 2774 | }, 2775 | "_position": { 2776 | "__type__": "cc.Vec3", 2777 | "x": -463, 2778 | "y": -254, 2779 | "z": 0 2780 | }, 2781 | "_scale": { 2782 | "__type__": "cc.Vec3", 2783 | "x": 1, 2784 | "y": 1, 2785 | "z": 1 2786 | }, 2787 | "_eulerAngles": { 2788 | "__type__": "cc.Vec3", 2789 | "x": 0, 2790 | "y": 0, 2791 | "z": 0 2792 | }, 2793 | "_skewX": 0, 2794 | "_skewY": 0, 2795 | "_is3DNode": false, 2796 | "groupIndex": 0, 2797 | "_id": "feGCvroFRIVpXBXA4evXw7" 2798 | }, 2799 | { 2800 | "__type__": "cc.Node", 2801 | "_name": "Label", 2802 | "_objFlags": 0, 2803 | "_parent": { 2804 | "__id__": 74 2805 | }, 2806 | "_children": [], 2807 | "_active": true, 2808 | "_level": 3, 2809 | "_components": [ 2810 | { 2811 | "__id__": 76 2812 | }, 2813 | { 2814 | "__id__": 77 2815 | } 2816 | ], 2817 | "_prefab": null, 2818 | "_opacity": 255, 2819 | "_color": { 2820 | "__type__": "cc.Color", 2821 | "r": 255, 2822 | "g": 255, 2823 | "b": 255, 2824 | "a": 255 2825 | }, 2826 | "_contentSize": { 2827 | "__type__": "cc.Size", 2828 | "width": 126.7, 2829 | "height": 50.4 2830 | }, 2831 | "_anchorPoint": { 2832 | "__type__": "cc.Vec2", 2833 | "x": 0.5, 2834 | "y": 0.5 2835 | }, 2836 | "_position": { 2837 | "__type__": "cc.Vec3", 2838 | "x": 0, 2839 | "y": 0, 2840 | "z": 0 2841 | }, 2842 | "_scale": { 2843 | "__type__": "cc.Vec3", 2844 | "x": 1, 2845 | "y": 1, 2846 | "z": 1 2847 | }, 2848 | "_eulerAngles": { 2849 | "__type__": "cc.Vec3", 2850 | "x": 0, 2851 | "y": 0, 2852 | "z": 0 2853 | }, 2854 | "_skewX": 0, 2855 | "_skewY": 0, 2856 | "_is3DNode": false, 2857 | "groupIndex": 0, 2858 | "_id": "0d9Ic6+pBPAqX8ipRV+8h6" 2859 | }, 2860 | { 2861 | "__type__": "cc.Label", 2862 | "_name": "", 2863 | "_objFlags": 0, 2864 | "node": { 2865 | "__id__": 75 2866 | }, 2867 | "_enabled": true, 2868 | "_materials": [ 2869 | { 2870 | "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" 2871 | } 2872 | ], 2873 | "_useOriginalSize": false, 2874 | "_string": "Mosaic", 2875 | "_N$string": "Mosaic", 2876 | "_fontSize": 40, 2877 | "_lineHeight": 40, 2878 | "_enableWrapText": true, 2879 | "_N$file": null, 2880 | "_isSystemFontUsed": true, 2881 | "_spacingX": 0, 2882 | "_batchAsBitmap": false, 2883 | "_N$horizontalAlign": 1, 2884 | "_N$verticalAlign": 1, 2885 | "_N$fontFamily": "Arial", 2886 | "_N$overflow": 0, 2887 | "_N$cacheMode": 0, 2888 | "_id": "63ZY02949JOK6wnhDcWvvP" 2889 | }, 2890 | { 2891 | "__type__": "4cd0ffQe75Ddod5dqnEgLHx", 2892 | "_name": "", 2893 | "_objFlags": 0, 2894 | "node": { 2895 | "__id__": 75 2896 | }, 2897 | "_enabled": true, 2898 | "shaderHelper": { 2899 | "__id__": 78 2900 | }, 2901 | "_id": "21scAHOIFIUIq8D4RsdvHy" 2902 | }, 2903 | { 2904 | "__type__": "49d0auleM9GkaUgf+inMFoR", 2905 | "_name": "", 2906 | "_objFlags": 0, 2907 | "node": { 2908 | "__id__": 74 2909 | }, 2910 | "_enabled": true, 2911 | "_program": 8, 2912 | "_props": [], 2913 | "_id": "56zgutDNtL+I7GbT2rsgcB" 2914 | }, 2915 | { 2916 | "__type__": "cc.Sprite", 2917 | "_name": "", 2918 | "_objFlags": 0, 2919 | "node": { 2920 | "__id__": 74 2921 | }, 2922 | "_enabled": true, 2923 | "_materials": [ 2924 | null 2925 | ], 2926 | "_srcBlendFactor": 770, 2927 | "_dstBlendFactor": 771, 2928 | "_spriteFrame": { 2929 | "__uuid__": "79900e22-f1e4-4f8f-9a27-033142cd41ce" 2930 | }, 2931 | "_type": 0, 2932 | "_sizeMode": 0, 2933 | "_fillType": 0, 2934 | "_fillCenter": { 2935 | "__type__": "cc.Vec2", 2936 | "x": 0, 2937 | "y": 0 2938 | }, 2939 | "_fillStart": 0, 2940 | "_fillRange": 0, 2941 | "_isTrimmedMode": true, 2942 | "_atlas": null, 2943 | "_id": "81IbccBJ9BTo0XWndndfI8" 2944 | }, 2945 | { 2946 | "__type__": "cc.Node", 2947 | "_name": "image", 2948 | "_objFlags": 0, 2949 | "_parent": { 2950 | "__id__": 13 2951 | }, 2952 | "_children": [ 2953 | { 2954 | "__id__": 81 2955 | } 2956 | ], 2957 | "_active": true, 2958 | "_level": 2, 2959 | "_components": [ 2960 | { 2961 | "__id__": 85 2962 | }, 2963 | { 2964 | "__id__": 84 2965 | } 2966 | ], 2967 | "_prefab": null, 2968 | "_opacity": 255, 2969 | "_color": { 2970 | "__type__": "cc.Color", 2971 | "r": 255, 2972 | "g": 255, 2973 | "b": 255, 2974 | "a": 255 2975 | }, 2976 | "_contentSize": { 2977 | "__type__": "cc.Size", 2978 | "width": 400, 2979 | "height": 250 2980 | }, 2981 | "_anchorPoint": { 2982 | "__type__": "cc.Vec2", 2983 | "x": 0.5, 2984 | "y": 0.5 2985 | }, 2986 | "_position": { 2987 | "__type__": "cc.Vec3", 2988 | "x": -7.599999999999952, 2989 | "y": -254, 2990 | "z": 0 2991 | }, 2992 | "_scale": { 2993 | "__type__": "cc.Vec3", 2994 | "x": 1, 2995 | "y": 1, 2996 | "z": 1 2997 | }, 2998 | "_eulerAngles": { 2999 | "__type__": "cc.Vec3", 3000 | "x": 0, 3001 | "y": 0, 3002 | "z": 0 3003 | }, 3004 | "_skewX": 0, 3005 | "_skewY": 0, 3006 | "_is3DNode": false, 3007 | "groupIndex": 0, 3008 | "_id": "2aPDdNG0RCz6/weItToZLI" 3009 | }, 3010 | { 3011 | "__type__": "cc.Node", 3012 | "_name": "Label", 3013 | "_objFlags": 0, 3014 | "_parent": { 3015 | "__id__": 80 3016 | }, 3017 | "_children": [], 3018 | "_active": true, 3019 | "_level": 3, 3020 | "_components": [ 3021 | { 3022 | "__id__": 82 3023 | }, 3024 | { 3025 | "__id__": 83 3026 | } 3027 | ], 3028 | "_prefab": null, 3029 | "_opacity": 255, 3030 | "_color": { 3031 | "__type__": "cc.Color", 3032 | "r": 255, 3033 | "g": 255, 3034 | "b": 255, 3035 | "a": 255 3036 | }, 3037 | "_contentSize": { 3038 | "__type__": "cc.Size", 3039 | "width": 126.74, 3040 | "height": 50.4 3041 | }, 3042 | "_anchorPoint": { 3043 | "__type__": "cc.Vec2", 3044 | "x": 0.5, 3045 | "y": 0.5 3046 | }, 3047 | "_position": { 3048 | "__type__": "cc.Vec3", 3049 | "x": 0, 3050 | "y": 0, 3051 | "z": 0 3052 | }, 3053 | "_scale": { 3054 | "__type__": "cc.Vec3", 3055 | "x": 1, 3056 | "y": 1, 3057 | "z": 1 3058 | }, 3059 | "_eulerAngles": { 3060 | "__type__": "cc.Vec3", 3061 | "x": 0, 3062 | "y": 0, 3063 | "z": 0 3064 | }, 3065 | "_skewX": 0, 3066 | "_skewY": 0, 3067 | "_is3DNode": false, 3068 | "groupIndex": 0, 3069 | "_id": "7aAXS91IBJ3JRGPbSZSquO" 3070 | }, 3071 | { 3072 | "__type__": "cc.Label", 3073 | "_name": "", 3074 | "_objFlags": 0, 3075 | "node": { 3076 | "__id__": 81 3077 | }, 3078 | "_enabled": true, 3079 | "_materials": [ 3080 | { 3081 | "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" 3082 | } 3083 | ], 3084 | "_useOriginalSize": false, 3085 | "_string": "Outline", 3086 | "_N$string": "Outline", 3087 | "_fontSize": 40, 3088 | "_lineHeight": 40, 3089 | "_enableWrapText": true, 3090 | "_N$file": null, 3091 | "_isSystemFontUsed": true, 3092 | "_spacingX": 0, 3093 | "_batchAsBitmap": false, 3094 | "_N$horizontalAlign": 1, 3095 | "_N$verticalAlign": 1, 3096 | "_N$fontFamily": "Arial", 3097 | "_N$overflow": 0, 3098 | "_N$cacheMode": 0, 3099 | "_id": "39tj+xcttJj6p98ZnWy1aD" 3100 | }, 3101 | { 3102 | "__type__": "4cd0ffQe75Ddod5dqnEgLHx", 3103 | "_name": "", 3104 | "_objFlags": 0, 3105 | "node": { 3106 | "__id__": 81 3107 | }, 3108 | "_enabled": true, 3109 | "shaderHelper": { 3110 | "__id__": 84 3111 | }, 3112 | "_id": "b4ZHaVhrxOR4T2DRy1pvjQ" 3113 | }, 3114 | { 3115 | "__type__": "49d0auleM9GkaUgf+inMFoR", 3116 | "_name": "", 3117 | "_objFlags": 0, 3118 | "node": { 3119 | "__id__": 80 3120 | }, 3121 | "_enabled": true, 3122 | "_program": 9, 3123 | "_props": [], 3124 | "_id": "12OhpqODRKjaomuxcxWMd/" 3125 | }, 3126 | { 3127 | "__type__": "cc.Sprite", 3128 | "_name": "", 3129 | "_objFlags": 0, 3130 | "node": { 3131 | "__id__": 80 3132 | }, 3133 | "_enabled": true, 3134 | "_materials": [ 3135 | null 3136 | ], 3137 | "_srcBlendFactor": 770, 3138 | "_dstBlendFactor": 771, 3139 | "_spriteFrame": { 3140 | "__uuid__": "79900e22-f1e4-4f8f-9a27-033142cd41ce" 3141 | }, 3142 | "_type": 0, 3143 | "_sizeMode": 0, 3144 | "_fillType": 0, 3145 | "_fillCenter": { 3146 | "__type__": "cc.Vec2", 3147 | "x": 0, 3148 | "y": 0 3149 | }, 3150 | "_fillStart": 0, 3151 | "_fillRange": 0, 3152 | "_isTrimmedMode": true, 3153 | "_atlas": null, 3154 | "_id": "e5s1jwDONIgYR9YKEXAwGk" 3155 | }, 3156 | { 3157 | "__type__": "cc.Node", 3158 | "_name": "image", 3159 | "_objFlags": 0, 3160 | "_parent": { 3161 | "__id__": 13 3162 | }, 3163 | "_children": [ 3164 | { 3165 | "__id__": 87 3166 | } 3167 | ], 3168 | "_active": true, 3169 | "_level": 2, 3170 | "_components": [ 3171 | { 3172 | "__id__": 91 3173 | }, 3174 | { 3175 | "__id__": 90 3176 | } 3177 | ], 3178 | "_prefab": null, 3179 | "_opacity": 255, 3180 | "_color": { 3181 | "__type__": "cc.Color", 3182 | "r": 255, 3183 | "g": 255, 3184 | "b": 255, 3185 | "a": 255 3186 | }, 3187 | "_contentSize": { 3188 | "__type__": "cc.Size", 3189 | "width": 400, 3190 | "height": 250 3191 | }, 3192 | "_anchorPoint": { 3193 | "__type__": "cc.Vec2", 3194 | "x": 0.5, 3195 | "y": 0.5 3196 | }, 3197 | "_position": { 3198 | "__type__": "cc.Vec3", 3199 | "x": 447.80000000000007, 3200 | "y": -254, 3201 | "z": 0 3202 | }, 3203 | "_scale": { 3204 | "__type__": "cc.Vec3", 3205 | "x": 1, 3206 | "y": 1, 3207 | "z": 1 3208 | }, 3209 | "_eulerAngles": { 3210 | "__type__": "cc.Vec3", 3211 | "x": 0, 3212 | "y": 0, 3213 | "z": 0 3214 | }, 3215 | "_skewX": 0, 3216 | "_skewY": 0, 3217 | "_is3DNode": false, 3218 | "groupIndex": 0, 3219 | "_id": "cd7F2r9QFBtKnWvZ1GYXqf" 3220 | }, 3221 | { 3222 | "__type__": "cc.Node", 3223 | "_name": "Label", 3224 | "_objFlags": 0, 3225 | "_parent": { 3226 | "__id__": 86 3227 | }, 3228 | "_children": [], 3229 | "_active": true, 3230 | "_level": 3, 3231 | "_components": [ 3232 | { 3233 | "__id__": 88 3234 | }, 3235 | { 3236 | "__id__": 89 3237 | } 3238 | ], 3239 | "_prefab": null, 3240 | "_opacity": 255, 3241 | "_color": { 3242 | "__type__": "cc.Color", 3243 | "r": 255, 3244 | "g": 255, 3245 | "b": 255, 3246 | "a": 255 3247 | }, 3248 | "_contentSize": { 3249 | "__type__": "cc.Size", 3250 | "width": 184.53, 3251 | "height": 50.4 3252 | }, 3253 | "_anchorPoint": { 3254 | "__type__": "cc.Vec2", 3255 | "x": 0.5, 3256 | "y": 0.5 3257 | }, 3258 | "_position": { 3259 | "__type__": "cc.Vec3", 3260 | "x": 0, 3261 | "y": 0, 3262 | "z": 0 3263 | }, 3264 | "_scale": { 3265 | "__type__": "cc.Vec3", 3266 | "x": 1, 3267 | "y": 1, 3268 | "z": 1 3269 | }, 3270 | "_eulerAngles": { 3271 | "__type__": "cc.Vec3", 3272 | "x": 0, 3273 | "y": 0, 3274 | "z": 0 3275 | }, 3276 | "_skewX": 0, 3277 | "_skewY": 0, 3278 | "_is3DNode": false, 3279 | "groupIndex": 0, 3280 | "_id": "5f3+S199ZK2JWm3/kjhh3F" 3281 | }, 3282 | { 3283 | "__type__": "cc.Label", 3284 | "_name": "", 3285 | "_objFlags": 0, 3286 | "node": { 3287 | "__id__": 87 3288 | }, 3289 | "_enabled": true, 3290 | "_materials": [ 3291 | { 3292 | "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" 3293 | } 3294 | ], 3295 | "_useOriginalSize": false, 3296 | "_string": "RadialBlur", 3297 | "_N$string": "RadialBlur", 3298 | "_fontSize": 40, 3299 | "_lineHeight": 40, 3300 | "_enableWrapText": true, 3301 | "_N$file": null, 3302 | "_isSystemFontUsed": true, 3303 | "_spacingX": 0, 3304 | "_batchAsBitmap": false, 3305 | "_N$horizontalAlign": 1, 3306 | "_N$verticalAlign": 1, 3307 | "_N$fontFamily": "Arial", 3308 | "_N$overflow": 0, 3309 | "_N$cacheMode": 0, 3310 | "_id": "18KNjSPIJNG6/oZxRlLjtU" 3311 | }, 3312 | { 3313 | "__type__": "4cd0ffQe75Ddod5dqnEgLHx", 3314 | "_name": "", 3315 | "_objFlags": 0, 3316 | "node": { 3317 | "__id__": 87 3318 | }, 3319 | "_enabled": true, 3320 | "shaderHelper": { 3321 | "__id__": 90 3322 | }, 3323 | "_id": "2bTLjGyTxJ6rKmOdAA0b+X" 3324 | }, 3325 | { 3326 | "__type__": "49d0auleM9GkaUgf+inMFoR", 3327 | "_name": "", 3328 | "_objFlags": 0, 3329 | "node": { 3330 | "__id__": 86 3331 | }, 3332 | "_enabled": true, 3333 | "_program": 10, 3334 | "_props": [], 3335 | "_id": "54OWjShqdD1IA8RJXeSyRf" 3336 | }, 3337 | { 3338 | "__type__": "cc.Sprite", 3339 | "_name": "", 3340 | "_objFlags": 0, 3341 | "node": { 3342 | "__id__": 86 3343 | }, 3344 | "_enabled": true, 3345 | "_materials": [ 3346 | null 3347 | ], 3348 | "_srcBlendFactor": 770, 3349 | "_dstBlendFactor": 771, 3350 | "_spriteFrame": { 3351 | "__uuid__": "79900e22-f1e4-4f8f-9a27-033142cd41ce" 3352 | }, 3353 | "_type": 0, 3354 | "_sizeMode": 0, 3355 | "_fillType": 0, 3356 | "_fillCenter": { 3357 | "__type__": "cc.Vec2", 3358 | "x": 0, 3359 | "y": 0 3360 | }, 3361 | "_fillStart": 0, 3362 | "_fillRange": 0, 3363 | "_isTrimmedMode": true, 3364 | "_atlas": null, 3365 | "_id": "d40Ij+nJtOuIO3XjE1OnbB" 3366 | }, 3367 | { 3368 | "__type__": "cc.Node", 3369 | "_name": "image", 3370 | "_objFlags": 0, 3371 | "_parent": { 3372 | "__id__": 13 3373 | }, 3374 | "_children": [ 3375 | { 3376 | "__id__": 93 3377 | } 3378 | ], 3379 | "_active": true, 3380 | "_level": 2, 3381 | "_components": [ 3382 | { 3383 | "__id__": 97 3384 | }, 3385 | { 3386 | "__id__": 96 3387 | } 3388 | ], 3389 | "_prefab": null, 3390 | "_opacity": 255, 3391 | "_color": { 3392 | "__type__": "cc.Color", 3393 | "r": 255, 3394 | "g": 255, 3395 | "b": 255, 3396 | "a": 255 3397 | }, 3398 | "_contentSize": { 3399 | "__type__": "cc.Size", 3400 | "width": 400, 3401 | "height": 250 3402 | }, 3403 | "_anchorPoint": { 3404 | "__type__": "cc.Vec2", 3405 | "x": 0.5, 3406 | "y": 0.5 3407 | }, 3408 | "_position": { 3409 | "__type__": "cc.Vec3", 3410 | "x": -463, 3411 | "y": -508, 3412 | "z": 0 3413 | }, 3414 | "_scale": { 3415 | "__type__": "cc.Vec3", 3416 | "x": 1, 3417 | "y": 1, 3418 | "z": 1 3419 | }, 3420 | "_eulerAngles": { 3421 | "__type__": "cc.Vec3", 3422 | "x": 0, 3423 | "y": 0, 3424 | "z": 0 3425 | }, 3426 | "_skewX": 0, 3427 | "_skewY": 0, 3428 | "_is3DNode": false, 3429 | "groupIndex": 0, 3430 | "_id": "efktyIBylPm4rjCo3XLqR7" 3431 | }, 3432 | { 3433 | "__type__": "cc.Node", 3434 | "_name": "Label", 3435 | "_objFlags": 0, 3436 | "_parent": { 3437 | "__id__": 92 3438 | }, 3439 | "_children": [], 3440 | "_active": true, 3441 | "_level": 3, 3442 | "_components": [ 3443 | { 3444 | "__id__": 94 3445 | }, 3446 | { 3447 | "__id__": 95 3448 | } 3449 | ], 3450 | "_prefab": null, 3451 | "_opacity": 255, 3452 | "_color": { 3453 | "__type__": "cc.Color", 3454 | "r": 255, 3455 | "g": 255, 3456 | "b": 255, 3457 | "a": 255 3458 | }, 3459 | "_contentSize": { 3460 | "__type__": "cc.Size", 3461 | "width": 213.48, 3462 | "height": 50.4 3463 | }, 3464 | "_anchorPoint": { 3465 | "__type__": "cc.Vec2", 3466 | "x": 0.5, 3467 | "y": 0.5 3468 | }, 3469 | "_position": { 3470 | "__type__": "cc.Vec3", 3471 | "x": 0, 3472 | "y": 0, 3473 | "z": 0 3474 | }, 3475 | "_scale": { 3476 | "__type__": "cc.Vec3", 3477 | "x": 1, 3478 | "y": 1, 3479 | "z": 1 3480 | }, 3481 | "_eulerAngles": { 3482 | "__type__": "cc.Vec3", 3483 | "x": 0, 3484 | "y": 0, 3485 | "z": 0 3486 | }, 3487 | "_skewX": 0, 3488 | "_skewY": 0, 3489 | "_is3DNode": false, 3490 | "groupIndex": 0, 3491 | "_id": "9cBw+r6QdERZDL0oOZR4bH" 3492 | }, 3493 | { 3494 | "__type__": "cc.Label", 3495 | "_name": "", 3496 | "_objFlags": 0, 3497 | "node": { 3498 | "__id__": 93 3499 | }, 3500 | "_enabled": true, 3501 | "_materials": [ 3502 | { 3503 | "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" 3504 | } 3505 | ], 3506 | "_useOriginalSize": false, 3507 | "_string": "SearchLight", 3508 | "_N$string": "SearchLight", 3509 | "_fontSize": 40, 3510 | "_lineHeight": 40, 3511 | "_enableWrapText": true, 3512 | "_N$file": null, 3513 | "_isSystemFontUsed": true, 3514 | "_spacingX": 0, 3515 | "_batchAsBitmap": false, 3516 | "_N$horizontalAlign": 1, 3517 | "_N$verticalAlign": 1, 3518 | "_N$fontFamily": "Arial", 3519 | "_N$overflow": 0, 3520 | "_N$cacheMode": 0, 3521 | "_id": "b5Cq0EZppNdKLSB3HcYLV9" 3522 | }, 3523 | { 3524 | "__type__": "4cd0ffQe75Ddod5dqnEgLHx", 3525 | "_name": "", 3526 | "_objFlags": 0, 3527 | "node": { 3528 | "__id__": 93 3529 | }, 3530 | "_enabled": true, 3531 | "shaderHelper": { 3532 | "__id__": 96 3533 | }, 3534 | "_id": "a14eWDOBZLOLuX/OHkbXhW" 3535 | }, 3536 | { 3537 | "__type__": "49d0auleM9GkaUgf+inMFoR", 3538 | "_name": "", 3539 | "_objFlags": 0, 3540 | "node": { 3541 | "__id__": 92 3542 | }, 3543 | "_enabled": true, 3544 | "_program": 12, 3545 | "_props": [], 3546 | "_id": "25ViLwWIdAc7It+wMg4YsQ" 3547 | }, 3548 | { 3549 | "__type__": "cc.Sprite", 3550 | "_name": "", 3551 | "_objFlags": 0, 3552 | "node": { 3553 | "__id__": 92 3554 | }, 3555 | "_enabled": true, 3556 | "_materials": [ 3557 | null 3558 | ], 3559 | "_srcBlendFactor": 770, 3560 | "_dstBlendFactor": 771, 3561 | "_spriteFrame": { 3562 | "__uuid__": "79900e22-f1e4-4f8f-9a27-033142cd41ce" 3563 | }, 3564 | "_type": 0, 3565 | "_sizeMode": 0, 3566 | "_fillType": 0, 3567 | "_fillCenter": { 3568 | "__type__": "cc.Vec2", 3569 | "x": 0, 3570 | "y": 0 3571 | }, 3572 | "_fillStart": 0, 3573 | "_fillRange": 0, 3574 | "_isTrimmedMode": true, 3575 | "_atlas": null, 3576 | "_id": "b73VOHgvtJl70z7TikW9Ny" 3577 | }, 3578 | { 3579 | "__type__": "cc.Node", 3580 | "_name": "image", 3581 | "_objFlags": 0, 3582 | "_parent": { 3583 | "__id__": 13 3584 | }, 3585 | "_children": [ 3586 | { 3587 | "__id__": 99 3588 | } 3589 | ], 3590 | "_active": true, 3591 | "_level": 2, 3592 | "_components": [ 3593 | { 3594 | "__id__": 103 3595 | }, 3596 | { 3597 | "__id__": 102 3598 | } 3599 | ], 3600 | "_prefab": null, 3601 | "_opacity": 255, 3602 | "_color": { 3603 | "__type__": "cc.Color", 3604 | "r": 255, 3605 | "g": 255, 3606 | "b": 255, 3607 | "a": 255 3608 | }, 3609 | "_contentSize": { 3610 | "__type__": "cc.Size", 3611 | "width": 400, 3612 | "height": 250 3613 | }, 3614 | "_anchorPoint": { 3615 | "__type__": "cc.Vec2", 3616 | "x": 0.5, 3617 | "y": 0.5 3618 | }, 3619 | "_position": { 3620 | "__type__": "cc.Vec3", 3621 | "x": -7.599999999999952, 3622 | "y": -508, 3623 | "z": 0 3624 | }, 3625 | "_scale": { 3626 | "__type__": "cc.Vec3", 3627 | "x": 1, 3628 | "y": 1, 3629 | "z": 1 3630 | }, 3631 | "_eulerAngles": { 3632 | "__type__": "cc.Vec3", 3633 | "x": 0, 3634 | "y": 0, 3635 | "z": 0 3636 | }, 3637 | "_skewX": 0, 3638 | "_skewY": 0, 3639 | "_is3DNode": false, 3640 | "groupIndex": 0, 3641 | "_id": "4ahE2zWchPApXNWKe6u0b6" 3642 | }, 3643 | { 3644 | "__type__": "cc.Node", 3645 | "_name": "Label", 3646 | "_objFlags": 0, 3647 | "_parent": { 3648 | "__id__": 98 3649 | }, 3650 | "_children": [], 3651 | "_active": true, 3652 | "_level": 3, 3653 | "_components": [ 3654 | { 3655 | "__id__": 100 3656 | }, 3657 | { 3658 | "__id__": 101 3659 | } 3660 | ], 3661 | "_prefab": null, 3662 | "_opacity": 255, 3663 | "_color": { 3664 | "__type__": "cc.Color", 3665 | "r": 255, 3666 | "g": 255, 3667 | "b": 255, 3668 | "a": 255 3669 | }, 3670 | "_contentSize": { 3671 | "__type__": "cc.Size", 3672 | "width": 104.53, 3673 | "height": 50.4 3674 | }, 3675 | "_anchorPoint": { 3676 | "__type__": "cc.Vec2", 3677 | "x": 0.5, 3678 | "y": 0.5 3679 | }, 3680 | "_position": { 3681 | "__type__": "cc.Vec3", 3682 | "x": 0, 3683 | "y": 0, 3684 | "z": 0 3685 | }, 3686 | "_scale": { 3687 | "__type__": "cc.Vec3", 3688 | "x": 1, 3689 | "y": 1, 3690 | "z": 1 3691 | }, 3692 | "_eulerAngles": { 3693 | "__type__": "cc.Vec3", 3694 | "x": 0, 3695 | "y": 0, 3696 | "z": 0 3697 | }, 3698 | "_skewX": 0, 3699 | "_skewY": 0, 3700 | "_is3DNode": false, 3701 | "groupIndex": 0, 3702 | "_id": "60sPLMcqhAEYrUvGBtlmc1" 3703 | }, 3704 | { 3705 | "__type__": "cc.Label", 3706 | "_name": "", 3707 | "_objFlags": 0, 3708 | "node": { 3709 | "__id__": 99 3710 | }, 3711 | "_enabled": true, 3712 | "_materials": [ 3713 | { 3714 | "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" 3715 | } 3716 | ], 3717 | "_useOriginalSize": false, 3718 | "_string": "Stone", 3719 | "_N$string": "Stone", 3720 | "_fontSize": 40, 3721 | "_lineHeight": 40, 3722 | "_enableWrapText": true, 3723 | "_N$file": null, 3724 | "_isSystemFontUsed": true, 3725 | "_spacingX": 0, 3726 | "_batchAsBitmap": false, 3727 | "_N$horizontalAlign": 1, 3728 | "_N$verticalAlign": 1, 3729 | "_N$fontFamily": "Arial", 3730 | "_N$overflow": 0, 3731 | "_N$cacheMode": 0, 3732 | "_id": "fe3Ue41x1I2bbylUWai3hF" 3733 | }, 3734 | { 3735 | "__type__": "4cd0ffQe75Ddod5dqnEgLHx", 3736 | "_name": "", 3737 | "_objFlags": 0, 3738 | "node": { 3739 | "__id__": 99 3740 | }, 3741 | "_enabled": true, 3742 | "shaderHelper": { 3743 | "__id__": 102 3744 | }, 3745 | "_id": "ddcyIDmPRPJY7V7y+/vUdf" 3746 | }, 3747 | { 3748 | "__type__": "49d0auleM9GkaUgf+inMFoR", 3749 | "_name": "", 3750 | "_objFlags": 0, 3751 | "node": { 3752 | "__id__": 98 3753 | }, 3754 | "_enabled": true, 3755 | "_program": 13, 3756 | "_props": [], 3757 | "_id": "d5HIaZW2dN26wyu2W5m32L" 3758 | }, 3759 | { 3760 | "__type__": "cc.Sprite", 3761 | "_name": "", 3762 | "_objFlags": 0, 3763 | "node": { 3764 | "__id__": 98 3765 | }, 3766 | "_enabled": true, 3767 | "_materials": [ 3768 | null 3769 | ], 3770 | "_srcBlendFactor": 770, 3771 | "_dstBlendFactor": 771, 3772 | "_spriteFrame": { 3773 | "__uuid__": "79900e22-f1e4-4f8f-9a27-033142cd41ce" 3774 | }, 3775 | "_type": 0, 3776 | "_sizeMode": 0, 3777 | "_fillType": 0, 3778 | "_fillCenter": { 3779 | "__type__": "cc.Vec2", 3780 | "x": 0, 3781 | "y": 0 3782 | }, 3783 | "_fillStart": 0, 3784 | "_fillRange": 0, 3785 | "_isTrimmedMode": true, 3786 | "_atlas": null, 3787 | "_id": "25jwEHDSJDBZt+13CXRKSL" 3788 | }, 3789 | { 3790 | "__type__": "cc.Layout", 3791 | "_name": "", 3792 | "_objFlags": 0, 3793 | "node": { 3794 | "__id__": 13 3795 | }, 3796 | "_enabled": true, 3797 | "_layoutSize": { 3798 | "__type__": "cc.Size", 3799 | "width": 1334, 3800 | "height": 1274 3801 | }, 3802 | "_resize": 1, 3803 | "_N$layoutType": 3, 3804 | "_N$padding": 0, 3805 | "_N$cellSize": { 3806 | "__type__": "cc.Size", 3807 | "width": 40, 3808 | "height": 40 3809 | }, 3810 | "_N$startAxis": 0, 3811 | "_N$paddingLeft": 4, 3812 | "_N$paddingRight": 4, 3813 | "_N$paddingTop": 4, 3814 | "_N$paddingBottom": 4, 3815 | "_N$spacingX": 55.40000000000005, 3816 | "_N$spacingY": 4, 3817 | "_N$verticalDirection": 1, 3818 | "_N$horizontalDirection": 0, 3819 | "_N$affectedByScale": false, 3820 | "_id": "81oQ3UOLhGs73FUhIfaBct" 3821 | }, 3822 | { 3823 | "__type__": "cc.Widget", 3824 | "_name": "", 3825 | "_objFlags": 0, 3826 | "node": { 3827 | "__id__": 8 3828 | }, 3829 | "_enabled": true, 3830 | "alignMode": 0, 3831 | "_target": null, 3832 | "_alignFlags": 37, 3833 | "_left": 350.07654921020657, 3834 | "_right": 0, 3835 | "_top": 0, 3836 | "_bottom": 0, 3837 | "_verticalCenter": 0, 3838 | "_horizontalCenter": 0, 3839 | "_isAbsLeft": true, 3840 | "_isAbsRight": true, 3841 | "_isAbsTop": true, 3842 | "_isAbsBottom": true, 3843 | "_isAbsHorizontalCenter": true, 3844 | "_isAbsVerticalCenter": true, 3845 | "_originalWidth": 0, 3846 | "_originalHeight": 237, 3847 | "_id": "7fO6k5WFtGVLcuLkANxxjO" 3848 | }, 3849 | { 3850 | "__type__": "cc.Sprite", 3851 | "_name": "", 3852 | "_objFlags": 0, 3853 | "node": { 3854 | "__id__": 8 3855 | }, 3856 | "_enabled": true, 3857 | "_materials": [ 3858 | { 3859 | "__uuid__": "eca5d2f2-8ef6-41c2-bbe6-f9c79d09c432" 3860 | } 3861 | ], 3862 | "_srcBlendFactor": 770, 3863 | "_dstBlendFactor": 771, 3864 | "_spriteFrame": { 3865 | "__uuid__": "5fe5dcaa-b513-4dc5-a166-573627b3a159" 3866 | }, 3867 | "_type": 1, 3868 | "_sizeMode": 0, 3869 | "_fillType": 0, 3870 | "_fillCenter": { 3871 | "__type__": "cc.Vec2", 3872 | "x": 0, 3873 | "y": 0 3874 | }, 3875 | "_fillStart": 0, 3876 | "_fillRange": 0, 3877 | "_isTrimmedMode": true, 3878 | "_atlas": null, 3879 | "_id": "2f10JnxslJpLvZmG6+yeiO" 3880 | }, 3881 | { 3882 | "__type__": "cc.Widget", 3883 | "_name": "", 3884 | "_objFlags": 0, 3885 | "node": { 3886 | "__id__": 7 3887 | }, 3888 | "_enabled": true, 3889 | "alignMode": 1, 3890 | "_target": null, 3891 | "_alignFlags": 45, 3892 | "_left": 0, 3893 | "_right": 0, 3894 | "_top": 0, 3895 | "_bottom": 0, 3896 | "_verticalCenter": 0, 3897 | "_horizontalCenter": 0, 3898 | "_isAbsLeft": true, 3899 | "_isAbsRight": true, 3900 | "_isAbsTop": true, 3901 | "_isAbsBottom": true, 3902 | "_isAbsHorizontalCenter": true, 3903 | "_isAbsVerticalCenter": true, 3904 | "_originalWidth": 240, 3905 | "_originalHeight": 250, 3906 | "_id": "8e4fM0rcBKFpXmfYdtAp51" 3907 | }, 3908 | { 3909 | "__type__": "cc.Canvas", 3910 | "_name": "", 3911 | "_objFlags": 0, 3912 | "node": { 3913 | "__id__": 2 3914 | }, 3915 | "_enabled": true, 3916 | "_designResolution": { 3917 | "__type__": "cc.Size", 3918 | "width": 1334, 3919 | "height": 750 3920 | }, 3921 | "_fitWidth": false, 3922 | "_fitHeight": true, 3923 | "_id": "b68Wb4pytHU7ciA4bsXg1L" 3924 | } 3925 | ] -------------------------------------------------------------------------------- /assets/scene/test-shader-display.fire.meta: -------------------------------------------------------------------------------- 1 | { 2 | "ver": "1.2.1", 3 | "uuid": "7655543f-36b2-43fb-9dd4-8b2b6ee60ea0", 4 | "asyncLoadAssets": false, 5 | "autoReleaseAssets": false, 6 | "subMetas": {} 7 | } -------------------------------------------------------------------------------- /assets/scene/test-single.fire: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "__type__": "cc.SceneAsset", 4 | "_name": "", 5 | "_objFlags": 0, 6 | "_native": "", 7 | "scene": { 8 | "__id__": 1 9 | } 10 | }, 11 | { 12 | "__type__": "cc.Scene", 13 | "_objFlags": 0, 14 | "_parent": null, 15 | "_children": [ 16 | { 17 | "__id__": 2 18 | } 19 | ], 20 | "_active": true, 21 | "_level": 0, 22 | "_components": [], 23 | "_prefab": null, 24 | "_opacity": 255, 25 | "_color": { 26 | "__type__": "cc.Color", 27 | "r": 255, 28 | "g": 255, 29 | "b": 255, 30 | "a": 255 31 | }, 32 | "_contentSize": { 33 | "__type__": "cc.Size", 34 | "width": 0, 35 | "height": 0 36 | }, 37 | "_anchorPoint": { 38 | "__type__": "cc.Vec2", 39 | "x": 0, 40 | "y": 0 41 | }, 42 | "_scale": { 43 | "__type__": "cc.Vec3", 44 | "x": 1, 45 | "y": 1, 46 | "z": 1 47 | }, 48 | "_is3DNode": true, 49 | "groupIndex": 0, 50 | "autoReleaseAssets": false, 51 | "_id": "33eeb56d-bfe6-4819-b49c-ab05d52cb78b" 52 | }, 53 | { 54 | "__type__": "cc.Node", 55 | "_name": "Canvas", 56 | "_objFlags": 0, 57 | "_parent": { 58 | "__id__": 1 59 | }, 60 | "_children": [ 61 | { 62 | "__id__": 3 63 | }, 64 | { 65 | "__id__": 5 66 | } 67 | ], 68 | "_active": true, 69 | "_level": 0, 70 | "_components": [ 71 | { 72 | "__id__": 11 73 | } 74 | ], 75 | "_prefab": null, 76 | "_opacity": 255, 77 | "_color": { 78 | "__type__": "cc.Color", 79 | "r": 255, 80 | "g": 255, 81 | "b": 255, 82 | "a": 255 83 | }, 84 | "_contentSize": { 85 | "__type__": "cc.Size", 86 | "width": 960, 87 | "height": 640 88 | }, 89 | "_anchorPoint": { 90 | "__type__": "cc.Vec2", 91 | "x": 0.5, 92 | "y": 0.5 93 | }, 94 | "_position": { 95 | "__type__": "cc.Vec3", 96 | "x": 480, 97 | "y": 320, 98 | "z": 0 99 | }, 100 | "_scale": { 101 | "__type__": "cc.Vec3", 102 | "x": 1, 103 | "y": 1, 104 | "z": 1 105 | }, 106 | "_eulerAngles": { 107 | "__type__": "cc.Vec3", 108 | "x": 0, 109 | "y": 0, 110 | "z": 0 111 | }, 112 | "_skewX": 0, 113 | "_skewY": 0, 114 | "_is3DNode": false, 115 | "groupIndex": 0, 116 | "_id": "ee28RdUAxFVaghpQAAglv9" 117 | }, 118 | { 119 | "__type__": "cc.Node", 120 | "_name": "Main Camera", 121 | "_objFlags": 0, 122 | "_parent": { 123 | "__id__": 2 124 | }, 125 | "_children": [], 126 | "_active": true, 127 | "_level": 1, 128 | "_components": [ 129 | { 130 | "__id__": 4 131 | } 132 | ], 133 | "_prefab": null, 134 | "_opacity": 255, 135 | "_color": { 136 | "__type__": "cc.Color", 137 | "r": 255, 138 | "g": 255, 139 | "b": 255, 140 | "a": 255 141 | }, 142 | "_contentSize": { 143 | "__type__": "cc.Size", 144 | "width": 0, 145 | "height": 0 146 | }, 147 | "_anchorPoint": { 148 | "__type__": "cc.Vec2", 149 | "x": 0.5, 150 | "y": 0.5 151 | }, 152 | "_position": { 153 | "__type__": "cc.Vec3", 154 | "x": 0, 155 | "y": 0, 156 | "z": 210.4441731196186 157 | }, 158 | "_scale": { 159 | "__type__": "cc.Vec3", 160 | "x": 1, 161 | "y": 1, 162 | "z": 1 163 | }, 164 | "_eulerAngles": { 165 | "__type__": "cc.Vec3", 166 | "x": 0, 167 | "y": 0, 168 | "z": 0 169 | }, 170 | "_skewX": 0, 171 | "_skewY": 0, 172 | "_is3DNode": false, 173 | "groupIndex": 0, 174 | "_id": "34bPYsv1lO3rRYpGvSEcUT" 175 | }, 176 | { 177 | "__type__": "cc.Camera", 178 | "_name": "", 179 | "_objFlags": 0, 180 | "node": { 181 | "__id__": 3 182 | }, 183 | "_enabled": true, 184 | "_cullingMask": 4294967295, 185 | "_clearFlags": 7, 186 | "_backgroundColor": { 187 | "__type__": "cc.Color", 188 | "r": 0, 189 | "g": 0, 190 | "b": 0, 191 | "a": 255 192 | }, 193 | "_depth": -1, 194 | "_zoomRatio": 1, 195 | "_targetTexture": null, 196 | "_fov": 60, 197 | "_orthoSize": 10, 198 | "_nearClip": 1, 199 | "_farClip": 4096, 200 | "_ortho": true, 201 | "_rect": { 202 | "__type__": "cc.Rect", 203 | "x": 0, 204 | "y": 0, 205 | "width": 1, 206 | "height": 1 207 | }, 208 | "_renderStages": 1, 209 | "_id": "7cGWbjOINF7bZuR7lQ8IaT" 210 | }, 211 | { 212 | "__type__": "cc.Node", 213 | "_name": "wcard", 214 | "_objFlags": 0, 215 | "_parent": { 216 | "__id__": 2 217 | }, 218 | "_children": [], 219 | "_active": true, 220 | "_level": 1, 221 | "_components": [ 222 | { 223 | "__id__": 6 224 | }, 225 | { 226 | "__id__": 7 227 | }, 228 | { 229 | "__id__": 8 230 | } 231 | ], 232 | "_prefab": null, 233 | "_opacity": 255, 234 | "_color": { 235 | "__type__": "cc.Color", 236 | "r": 255, 237 | "g": 255, 238 | "b": 255, 239 | "a": 255 240 | }, 241 | "_contentSize": { 242 | "__type__": "cc.Size", 243 | "width": 512, 244 | "height": 512 245 | }, 246 | "_anchorPoint": { 247 | "__type__": "cc.Vec2", 248 | "x": 0.5, 249 | "y": 0.5 250 | }, 251 | "_position": { 252 | "__type__": "cc.Vec3", 253 | "x": 0, 254 | "y": 0, 255 | "z": 0 256 | }, 257 | "_scale": { 258 | "__type__": "cc.Vec3", 259 | "x": 1, 260 | "y": 1, 261 | "z": 1 262 | }, 263 | "_eulerAngles": { 264 | "__type__": "cc.Vec3", 265 | "x": 0, 266 | "y": 0, 267 | "z": 0 268 | }, 269 | "_skewX": 0, 270 | "_skewY": 0, 271 | "_is3DNode": false, 272 | "groupIndex": 0, 273 | "_id": "31rhFRKmxDIalzE38Wj5cI" 274 | }, 275 | { 276 | "__type__": "cc.Sprite", 277 | "_name": "", 278 | "_objFlags": 0, 279 | "node": { 280 | "__id__": 5 281 | }, 282 | "_enabled": true, 283 | "_materials": [ 284 | null 285 | ], 286 | "_srcBlendFactor": 770, 287 | "_dstBlendFactor": 771, 288 | "_spriteFrame": { 289 | "__uuid__": "4c393e12-4663-4dbd-b8ae-51b5d67c9c02" 290 | }, 291 | "_type": 0, 292 | "_sizeMode": 2, 293 | "_fillType": 0, 294 | "_fillCenter": { 295 | "__type__": "cc.Vec2", 296 | "x": 0, 297 | "y": 0 298 | }, 299 | "_fillStart": 0, 300 | "_fillRange": 0, 301 | "_isTrimmedMode": true, 302 | "_atlas": null, 303 | "_id": "d2QXtiYt5NvL7fkGgxWh6G" 304 | }, 305 | { 306 | "__type__": "5866cn/yXtO664c25gnwSdk", 307 | "_name": "", 308 | "_objFlags": 0, 309 | "node": { 310 | "__id__": 5 311 | }, 312 | "_enabled": true, 313 | "_max": 0.7, 314 | "_id": "a9uAD1XSRD5peSCCF4P4yX" 315 | }, 316 | { 317 | "__type__": "49d0auleM9GkaUgf+inMFoR", 318 | "_name": "", 319 | "_objFlags": 0, 320 | "node": { 321 | "__id__": 5 322 | }, 323 | "_enabled": true, 324 | "_program": 5, 325 | "_props": [ 326 | { 327 | "__id__": 9 328 | }, 329 | { 330 | "__id__": 10 331 | } 332 | ], 333 | "_id": "2eBj8PnIZOgowaHihQ7izH" 334 | }, 335 | { 336 | "__type__": "ShaderProperty", 337 | "key": "factor", 338 | "value": 0.5 339 | }, 340 | { 341 | "__type__": "ShaderProperty", 342 | "key": "width", 343 | "value": 0.02 344 | }, 345 | { 346 | "__type__": "cc.Canvas", 347 | "_name": "", 348 | "_objFlags": 0, 349 | "node": { 350 | "__id__": 2 351 | }, 352 | "_enabled": true, 353 | "_designResolution": { 354 | "__type__": "cc.Size", 355 | "width": 960, 356 | "height": 640 357 | }, 358 | "_fitWidth": false, 359 | "_fitHeight": true, 360 | "_id": "ccc3kofc1G9LPjkwpNdEnz" 361 | } 362 | ] -------------------------------------------------------------------------------- /assets/scene/test-single.fire.meta: -------------------------------------------------------------------------------- 1 | { 2 | "ver": "1.2.1", 3 | "uuid": "33eeb56d-bfe6-4819-b49c-ab05d52cb78b", 4 | "asyncLoadAssets": false, 5 | "autoReleaseAssets": false, 6 | "subMetas": {} 7 | } -------------------------------------------------------------------------------- /assets/texutres.meta: -------------------------------------------------------------------------------- 1 | { 2 | "ver": "1.0.1", 3 | "uuid": "b0756b05-af6d-4068-b2a5-0bafd177770c", 4 | "isSubpackage": false, 5 | "subpackageName": "", 6 | "subMetas": {} 7 | } -------------------------------------------------------------------------------- /assets/texutres/content.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ShawnZhang2015/ShaderHelper2/3edabae733eea229318e9ac57b5a4de0217abacb/assets/texutres/content.png -------------------------------------------------------------------------------- /assets/texutres/content.png.meta: -------------------------------------------------------------------------------- 1 | { 2 | "ver": "2.3.3", 3 | "uuid": "436035bd-de7d-476a-9a27-30a052766f49", 4 | "type": "sprite", 5 | "wrapMode": "clamp", 6 | "filterMode": "bilinear", 7 | "premultiplyAlpha": false, 8 | "genMipmaps": false, 9 | "packable": false, 10 | "platformSettings": {}, 11 | "subMetas": { 12 | "content": { 13 | "ver": "1.0.4", 14 | "uuid": "4c393e12-4663-4dbd-b8ae-51b5d67c9c02", 15 | "rawTextureUuid": "436035bd-de7d-476a-9a27-30a052766f49", 16 | "trimType": "auto", 17 | "trimThreshold": 1, 18 | "rotated": false, 19 | "offsetX": 0, 20 | "offsetY": 0, 21 | "trimX": 0, 22 | "trimY": 0, 23 | "width": 512, 24 | "height": 512, 25 | "rawWidth": 512, 26 | "rawHeight": 512, 27 | "borderTop": 0, 28 | "borderBottom": 0, 29 | "borderLeft": 0, 30 | "borderRight": 0, 31 | "subMetas": {} 32 | } 33 | } 34 | } -------------------------------------------------------------------------------- /assets/texutres/image.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ShawnZhang2015/ShaderHelper2/3edabae733eea229318e9ac57b5a4de0217abacb/assets/texutres/image.jpg -------------------------------------------------------------------------------- /assets/texutres/image.jpg.meta: -------------------------------------------------------------------------------- 1 | { 2 | "ver": "2.3.3", 3 | "uuid": "2c4057b2-22f1-4267-95d2-b3df5f12b462", 4 | "type": "sprite", 5 | "wrapMode": "clamp", 6 | "filterMode": "bilinear", 7 | "premultiplyAlpha": false, 8 | "genMipmaps": false, 9 | "packable": true, 10 | "platformSettings": {}, 11 | "subMetas": { 12 | "image": { 13 | "ver": "1.0.4", 14 | "uuid": "79900e22-f1e4-4f8f-9a27-033142cd41ce", 15 | "rawTextureUuid": "2c4057b2-22f1-4267-95d2-b3df5f12b462", 16 | "trimType": "auto", 17 | "trimThreshold": 1, 18 | "rotated": false, 19 | "offsetX": 0, 20 | "offsetY": 0, 21 | "trimX": 0, 22 | "trimY": 0, 23 | "width": 960, 24 | "height": 600, 25 | "rawWidth": 960, 26 | "rawHeight": 600, 27 | "borderTop": 0, 28 | "borderBottom": 0, 29 | "borderLeft": 0, 30 | "borderRight": 0, 31 | "subMetas": {} 32 | } 33 | } 34 | } -------------------------------------------------------------------------------- /assets/texutres/wcard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ShawnZhang2015/ShaderHelper2/3edabae733eea229318e9ac57b5a4de0217abacb/assets/texutres/wcard.png -------------------------------------------------------------------------------- /assets/texutres/wcard.png.meta: -------------------------------------------------------------------------------- 1 | { 2 | "ver": "2.3.3", 3 | "uuid": "bfc64ae2-9fd1-4af6-838d-5e4916b49426", 4 | "type": "sprite", 5 | "wrapMode": "clamp", 6 | "filterMode": "bilinear", 7 | "premultiplyAlpha": false, 8 | "genMipmaps": false, 9 | "packable": true, 10 | "platformSettings": {}, 11 | "subMetas": { 12 | "wcard": { 13 | "ver": "1.0.4", 14 | "uuid": "7e43fd5c-4bee-469e-890b-75e0b17f2063", 15 | "rawTextureUuid": "bfc64ae2-9fd1-4af6-838d-5e4916b49426", 16 | "trimType": "auto", 17 | "trimThreshold": 1, 18 | "rotated": false, 19 | "offsetX": -8.5, 20 | "offsetY": -18, 21 | "trimX": 3, 22 | "trimY": 51, 23 | "width": 284, 24 | "height": 399, 25 | "rawWidth": 307, 26 | "rawHeight": 465, 27 | "borderTop": 0, 28 | "borderBottom": 0, 29 | "borderLeft": 0, 30 | "borderRight": 0, 31 | "subMetas": {} 32 | } 33 | } 34 | } -------------------------------------------------------------------------------- /gzh.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ShawnZhang2015/ShaderHelper2/3edabae733eea229318e9ac57b5a4de0217abacb/gzh.jpg -------------------------------------------------------------------------------- /js/ShaderHelper.js: -------------------------------------------------------------------------------- 1 | const ShaderEnum = cc.Enum({}); 2 | let ShaderProperty = require('ShaderProperty'); 3 | var ShaderHelper = cc.Class({ 4 | extends: cc.Component, 5 | properties: { 6 | _program: 0, 7 | program: { 8 | type: ShaderEnum, 9 | set: function (value) { 10 | if (this._program === value) { 11 | return; 12 | } 13 | this._program = value; 14 | this.applyEffect(); 15 | }, 16 | get: function () { 17 | return this._program; 18 | } 19 | }, 20 | _props: [ShaderProperty], 21 | props: { 22 | type: [ShaderProperty], 23 | set: function (value) { 24 | this._props = value; 25 | this.applyEffect(); 26 | }, 27 | get: function () { 28 | return this._props; 29 | } 30 | } 31 | }, 32 | 33 | 34 | onLoad() { 35 | this.material = null; 36 | }, 37 | 38 | start() { 39 | if (CC_EDITOR) { 40 | setTimeout(() => { 41 | this.applyEffect(); 42 | }, 1000); 43 | 44 | } else { 45 | this.applyEffect(); 46 | } 47 | 48 | }, 49 | 50 | applyEffect() { 51 | 52 | //获取精灵组件 53 | let sprite = this.node.getComponent(cc.Sprite); 54 | if (!sprite) { 55 | return; 56 | } 57 | 58 | let effectAsset = ShaderHelper.effectAssets[this.program]; 59 | //实例化一个材质对象 60 | let material = new cc.Material(); 61 | 62 | //在材质对象上开启USE_TEXTURE定义s 63 | material.define('USE_TEXTURE', true); 64 | 65 | //为材质设置effect,也是就绑定Shader了 66 | material.effectAsset = effectAsset; 67 | material.name = effectAsset.name; 68 | 69 | //将材质绑定到精灵组件上,精灵可以绑定多个材质 70 | //这里我们替换0号默认材质 71 | sprite.setMaterial(0, material); 72 | 73 | //从精灵组件上获取材质,这步很重要,不然没效果 74 | this.material = sprite.getMaterial(0); 75 | 76 | this.props.forEach(item => item.key && this.material.setProperty(item.key, item.value || 0)); 77 | } 78 | } 79 | ); 80 | 81 | ShaderHelper.effectAssets = []; 82 | 83 | cc.game.on(cc.game.EVENT_ENGINE_INITED, () => { 84 | cc.dynamicAtlasManager.enabled = false; 85 | cc.loader.loadResDir('effects', cc.EffectAsset, (error, res) => { 86 | ShaderHelper.effectAssets = res; 87 | let array = ShaderHelper.effectAssets.map((item, i) => { 88 | return {name: item._name, value: i}; 89 | }); 90 | cc.Class.Attr.setClassAttr(ShaderHelper, 'program', 'enumList', array); 91 | }); 92 | }); 93 | 94 | -------------------------------------------------------------------------------- /js/ShaderHelper.js.meta: -------------------------------------------------------------------------------- 1 | { 2 | "ver": "1.0.5", 3 | "uuid": "3f10b8b5-e10c-4a66-b7fd-e413b3a76f86", 4 | "isPlugin": false, 5 | "loadPluginInWeb": true, 6 | "loadPluginInNative": true, 7 | "loadPluginInEditor": false, 8 | "subMetas": {} 9 | } -------------------------------------------------------------------------------- /js/ShaderNameLabel.js: -------------------------------------------------------------------------------- 1 | let ShaderHelper = require('ShaderHelper'); 2 | cc.Class({ 3 | extends: cc.Component, 4 | 5 | properties: { 6 | shaderHelper:ShaderHelper, 7 | }, 8 | 9 | // LIFE-CYCLE CALLBACKS: 10 | 11 | // onLoad () {}, 12 | start () { 13 | if (!this.shaderHelper) { 14 | return; 15 | } 16 | 17 | setTimeout(() => { 18 | let effectAsset = ShaderHelper.effectAssets[this.shaderHelper.program]; 19 | this.getComponent(cc.Label).string = effectAsset.name; 20 | }, 1000); 21 | 22 | } 23 | 24 | // update (dt) {}, 25 | }); 26 | -------------------------------------------------------------------------------- /js/ShaderNameLabel.js.meta: -------------------------------------------------------------------------------- 1 | { 2 | "ver": "1.0.5", 3 | "uuid": "159a2c99-94e8-458a-84c7-5501f616ff1f", 4 | "isPlugin": false, 5 | "loadPluginInWeb": true, 6 | "loadPluginInNative": true, 7 | "loadPluginInEditor": false, 8 | "subMetas": {} 9 | } -------------------------------------------------------------------------------- /js/ShaderProperty.js: -------------------------------------------------------------------------------- 1 | cc.Class({ 2 | name: "Character", 3 | properties: { 4 | key: cc.String, 5 | value: cc.float, 6 | }, 7 | ctor: function () { 8 | this.key = ''; 9 | this.value = 0.0; 10 | }, 11 | } 12 | ); -------------------------------------------------------------------------------- /js/ShaderProperty.js.meta: -------------------------------------------------------------------------------- 1 | { 2 | "ver": "1.0.5", 3 | "uuid": "2534316e-c8ea-4b8e-abfc-5ae61e2ef9bf", 4 | "isPlugin": false, 5 | "loadPluginInWeb": true, 6 | "loadPluginInNative": true, 7 | "loadPluginInEditor": false, 8 | "subMetas": {} 9 | } -------------------------------------------------------------------------------- /js/ShaderTime.js: -------------------------------------------------------------------------------- 1 | cc.Class({ 2 | extends: cc.Component, 3 | 4 | properties: { 5 | _start:0, 6 | _material: null, 7 | _max:65535, 8 | max:{ 9 | get: function () { 10 | return this._max; 11 | }, 12 | set: function (value) { 13 | this._max = value; 14 | if (!CC_EDITOR) { 15 | return; 16 | } 17 | 18 | let sprite = this.node.getComponent(cc.Sprite); 19 | if (sprite) { 20 | let material = sprite.sharedMaterials[0]; 21 | material.effect.setProperty('time', value); 22 | } 23 | } 24 | }, 25 | }, 26 | 27 | start() { 28 | this._material = this.node.getComponent(cc.Sprite).sharedMaterials[0]; 29 | }, 30 | 31 | 32 | update(dt) { 33 | if (this.node.active && this._material) { 34 | this._setShaderTime(dt); 35 | } 36 | }, 37 | _setShaderTime(dt) { 38 | let start = this._start; 39 | if (start > this.max) start = 0; 40 | start += 0.01; 41 | this._material.effect.setProperty('time', start); 42 | 43 | this._start = start; 44 | }, 45 | }); 46 | -------------------------------------------------------------------------------- /js/ShaderTime.js.meta: -------------------------------------------------------------------------------- 1 | { 2 | "ver": "1.0.5", 3 | "uuid": "e336605b-e006-4d5a-8d87-eb249f0d99b2", 4 | "isPlugin": false, 5 | "loadPluginInWeb": true, 6 | "loadPluginInNative": true, 7 | "loadPluginInEditor": false, 8 | "subMetas": {} 9 | } -------------------------------------------------------------------------------- /jsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es6", 4 | "module": "commonjs", 5 | "experimentalDecorators": true 6 | }, 7 | "exclude": [ 8 | "node_modules", 9 | ".vscode", 10 | "library", 11 | "local", 12 | "settings", 13 | "temp" 14 | ] 15 | } -------------------------------------------------------------------------------- /project.json: -------------------------------------------------------------------------------- 1 | { 2 | "engine": "cocos-creator-js", 3 | "packages": "packages", 4 | "version": "2.1.3", 5 | "id": "2e5c00c1-5767-4fa5-ad78-892678edf38f" 6 | } -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | ## 使用方法 2 | [图文教程](https://mp.weixin.qq.com/s/gcPNixBy7mJCyeIYx9pEog) 3 | 4 | [视频教程](https://www.bilibili.com/video/av68095428) 5 | 6 | ## 旧版 ShaderHelper 2.0.x 请看这里 7 | https://github.com/ShawnZhang2015/ShaderHelper 8 | 9 | ## 更多详情关注公众号 10 | ![Creator星球游戏开发社区](https://github.com/ShawnZhang2015/ShaderHelper2/raw/master/gzh.jpg) 11 | 12 | ![Creator星球游戏开发社区](https://github.com/ShawnZhang2015/ShaderHelper2/raw/master/wxpay.jpg) 13 | 原创不易,众筹植发 -------------------------------------------------------------------------------- /settings/builder.json: -------------------------------------------------------------------------------- 1 | { 2 | "android-instant": { 3 | "REMOTE_SERVER_ROOT": "", 4 | "host": "", 5 | "pathPattern": "", 6 | "recordPath": "", 7 | "scheme": "https", 8 | "skipRecord": false 9 | }, 10 | "appBundle": false, 11 | "baidugame": { 12 | "REMOTE_SERVER_ROOT": "", 13 | "appid": "testappid", 14 | "orientation": "portrait", 15 | "subContext": "" 16 | }, 17 | "encryptJs": true, 18 | "excludeScenes": [], 19 | "fb-instant-games": {}, 20 | "includeSDKBox": false, 21 | "inlineSpriteFrames": true, 22 | "inlineSpriteFrames_native": true, 23 | "md5Cache": false, 24 | "mergeStartScene": false, 25 | "optimizeHotUpdate": false, 26 | "orientation": { 27 | "landscapeLeft": true, 28 | "landscapeRight": true, 29 | "portrait": false, 30 | "upsideDown": false 31 | }, 32 | "packageName": "org.cocos2d.ShaderHelper2", 33 | "qqplay": { 34 | "REMOTE_SERVER_ROOT": "", 35 | "orientation": "portrait", 36 | "zip": false 37 | }, 38 | "startScene": "33eeb56d-bfe6-4819-b49c-ab05d52cb78b", 39 | "title": "ShaderHelper2", 40 | "webOrientation": "auto", 41 | "wechatgame": { 42 | "REMOTE_SERVER_ROOT": "", 43 | "appid": "wxafe2a6cc8c9031ee", 44 | "orientation": "landscapeRight", 45 | "separate_engine": false, 46 | "subContext": "" 47 | }, 48 | "xxteaKey": "7450622b-b2f0-4c", 49 | "zipCompressJs": true 50 | } -------------------------------------------------------------------------------- /settings/project.json: -------------------------------------------------------------------------------- 1 | { 2 | "assets-sort-type": "name", 3 | "collision-matrix": [ 4 | [ 5 | true 6 | ] 7 | ], 8 | "design-resolution-height": 640, 9 | "design-resolution-width": 960, 10 | "excluded-modules": [], 11 | "facebook": { 12 | "appID": "", 13 | "audience": { 14 | "enable": false 15 | }, 16 | "enable": false, 17 | "live": { 18 | "enable": false 19 | } 20 | }, 21 | "fit-height": true, 22 | "fit-width": false, 23 | "group-list": [ 24 | "default" 25 | ], 26 | "last-module-event-record-time": 1568973405386, 27 | "simulator-orientation": false, 28 | "simulator-resolution": { 29 | "height": 640, 30 | "width": 960 31 | }, 32 | "start-scene": "current", 33 | "use-customize-simulator": false, 34 | "use-project-simulator-setting": false 35 | } -------------------------------------------------------------------------------- /settings/services.json: -------------------------------------------------------------------------------- 1 | { 2 | "services": [ 3 | { 4 | "service_id": "235", 5 | "service_name": "Cocos Analytics", 6 | "service_icon": "https://account.cocos.com/client/3f8f31ccf66995e183044f167c092395.png", 7 | "service_desc": "提供最核心最基本的数据、标准化界面功能简洁易用、数据准确性最好", 8 | "service_title": "精准了解游戏的新增、活跃、留存、付费等数据", 9 | "service_guide_url": "https://n-analytics.cocos.com/docs/", 10 | "service_sample_url": "https://github.com/cocos-creator/tutorial-dark-slash/tree/analytics", 11 | "service_dev_url": "http://analytics.cocos.com/realtime/jump_to/", 12 | "service_type": "3", 13 | "service_type_zh": "公司和个人游戏", 14 | "support_platform": [ 15 | "Android", 16 | "iOS", 17 | "HTML5" 18 | ], 19 | "package_download_url": "https://download.cocos.com/CocosServices/plugins/service-analytics/1.2.0_2.1.0.zip", 20 | "package_version_desc": "更新日期:2019/6/10
\n
更新说明:
\n1、优化SDK,修复H5-SDK 与多个小游戏平台适配问题,删除和优化init事件无用接口
\n2、如有相关问题咨询或者需求, 可以联系我们技术支持邮箱 support-cocos@cocos.com", 21 | "service_component_name": "service-analytics", 22 | "package_versions": [ 23 | "1.2.1_2.1.0", 24 | "1.2.0_2.1.0", 25 | "1.1.7_2.0.3", 26 | "1.1.6_2.0.1_2.0.2", 27 | "1.1.5_2.0.1", 28 | "1.1.4_2.0.1", 29 | "1.1.3_2.0.1", 30 | "1.1.2_2.0.0", 31 | "1.0.0_1.0.5" 32 | ], 33 | "build_platform": [], 34 | "require_verify": 0, 35 | "service_price": "", 36 | "service_protocol": "游戏首次开启该服务时,Cocos会后台通知服务方为游戏开通服务并初始化参数,服务方根据需要可能会获取您的Cocos账户信息,包括账户基本资料、游戏基本资料、账户余额等,点击确认开通按钮即视为您同意该服务访问您的账户信息,详见《Cocos用户服务协议》《Cocos隐私政策》" 37 | }, 38 | { 39 | "service_id": "241", 40 | "service_name": "Matchvs", 41 | "service_icon": "https://account.cocos.com/client/14406719a07eb3d714d36e5edc6e06fa.png", 42 | "service_desc": "通过SDK接入快速实现联网功能、帧同步、国内外多节点、服务器独立部署、gameServer自定义游戏服务端逻辑。", 43 | "service_title": "专业成熟的移动游戏联网与服务端解决方案", 44 | "service_guide_url": "http://doc.matchvs.com/QuickStart/QuickStart-CocosCreator", 45 | "service_sample_url": "http://www.matchvs.com/serviceCourse", 46 | "service_dev_url": "http://www.matchvs.com/cocosLogin", 47 | "service_type": "3", 48 | "service_type_zh": "公司和个人游戏", 49 | "support_platform": [ 50 | "Android", 51 | "iOS", 52 | "HTML5" 53 | ], 54 | "package_download_url": "https://download.cocos.com/CocosServices/plugins/service-matchvs/1.0.9_3.7.9.9.zip", 55 | "package_version_desc": "

更新日期: 2019/07/18\n更新内容:\n1、修复多节点登录返回值错误\n2、修复FaceBook平台受限安全策略的问题

", 56 | "service_component_name": "service-matchvs", 57 | "package_versions": [ 58 | "1.0.9_3.7.9.9", 59 | "1.0.7_3.7.9.6", 60 | "1.0.6_3.7.9.2", 61 | "1.0.5_3.7.7.3", 62 | "1.0.3_3.7.6.4" 63 | ], 64 | "build_platform": [], 65 | "require_verify": 0, 66 | "service_price": "该服务按使用量计费,计费规则,所产生的费用将由第三方从您的 Cocos 账户余额 中扣除。", 67 | "service_protocol": "游戏首次开启该服务时,Cocos会后台通知服务方为游戏开通服务并初始化参数,服务方根据需要可能会获取您的Cocos账户信息,包括账户基本资料、游戏基本资料、账户余额等,点击确认开通按钮即视为您同意该服务访问您的账户信息,详见《Cocos用户服务协议》《Cocos隐私政策》" 68 | }, 69 | { 70 | "service_id": "242", 71 | "service_name": "Agora Voice", 72 | "service_icon": "https://account.cocos.com/uploads/client_icon/2019-07-16/273952d155b4cdb72d2b1bc61de91ade.png", 73 | "service_desc": "稳定、低耗、76ms超低延时、全球200+数据中心覆盖;变声器、超高音质、听声辩位等丰富玩法极速接入;全平台支持:Android、iOS、Web。", 74 | "service_title": "游戏内置实时语音", 75 | "service_guide_url": "https://docs.agora.io/cn/Interactive Gaming/game_c?platform=Cocos Creator", 76 | "service_sample_url": "https://github.com/AgoraIO/Voice-Call-for-Mobile-Gaming/tree/master/Basic-Voice-Call-for-Gaming/Hello-CocosCreator-Voice-Agora", 77 | "service_dev_url": "https://sso.agora.io/api/oauth/cocos/login", 78 | "service_type": "3", 79 | "service_type_zh": "公司和个人游戏", 80 | "support_platform": [ 81 | "Android", 82 | "iOS", 83 | "HTML5" 84 | ], 85 | "package_download_url": "https://download.cocos.com/CocosServices/plugins/service-agora/1.0.2_2.2.3.20_2.5.2.zip", 86 | "package_version_desc": "更新日期:2019/06/27
\n
更新内容:
\n1、修复部分BUG
\n2、代码优化", 87 | "service_component_name": "service-agora", 88 | "package_versions": [ 89 | "1.0.2_2.2.3.20_2.5.2", 90 | "1.0.1_2.2.3.20_2.5.2" 91 | ], 92 | "build_platform": [], 93 | "require_verify": 1, 94 | "service_price": "该服务按使用量计费,计费规则,所产生的费用将由第三方从您的 Cocos 账户余额 中扣除。", 95 | "service_protocol": "游戏首次开启该服务时,Cocos会后台通知服务方为游戏开通服务并初始化参数,服务方根据需要可能会获取您的Cocos账户信息,包括账户基本资料、游戏基本资料、账户余额等,点击确认开通按钮即视为您同意该服务访问您的账户信息,详见《Cocos用户服务协议》《Cocos隐私政策》" 96 | } 97 | ], 98 | "game": { 99 | "name": "未知游戏", 100 | "appid": "UNKNOW" 101 | } 102 | } -------------------------------------------------------------------------------- /wxpay.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ShawnZhang2015/ShaderHelper2/3edabae733eea229318e9ac57b5a4de0217abacb/wxpay.jpg --------------------------------------------------------------------------------