cc.Class({ extends: cc.Component, properties: { m_delayTime: { default: 0, }, m_fluxayTime: { default: 1, }, m_intervalTime: { default: 1, }, m_scale: { default: 1, }, m_angle: { default: 0, }, m_reviseStartTime:{ default: 0, }, m_reviseTimeScale:{ default: 1, }, }, ctor(){ this._time = 0; }, onLoad () { this._time -= this.m_delayTime; let sprite = this.node.getComponent(cc.Sprite); this._material = sprite.getMaterial(0); this._material.setProperty("u_scale", this.m_scale); this._material.setProperty("u_angle", this.m_angle); this.refreshSpriteFrameData(); }, update(dt) { if (this._time > (this.m_fluxayTime + this.m_intervalTime)) { this._time = 0; } let u_time = this._time/this.m_fluxayTime; if(this._time >this.m_fluxayTime) { u_time = 1+((this._time-this.m_fluxayTime)/this.m_intervalTime); } if(this.m_reviseTimeScale != null && this.m_reviseStartTime != null) { u_time = u_time/this.m_reviseTimeScale; u_time -= this.m_reviseStartTime; } this._material.setProperty("u_time", u_time); this._time += dt; }, refreshSpriteFrameData(){ let sprite = this.node.getComponent(cc.Sprite); let material = sprite.getMaterial(0); let frame = sprite.spriteFrame; if(frame != null) { // xMin let l = frame.uv[0]; // xMax let r = frame.uv[6]; // yMax let b = frame.uv[3]; // yMin let t = frame.uv[5]; // 纹理在合图中的四个边界 uv 坐标 let u_uvOffset = new cc.Vec4(l, t, r, b); // 纹理是否旋转 let u_uvRotated = frame.isRotated() ? 1.0 : 0.0; // 设置材质的属性 if(material.getProperty("u_uvOffset") !== undefined) { material.setProperty("u_uvOffset", u_uvOffset); } if(material.getProperty("u_uvRotated") !== undefined) { material.setProperty("u_uvRotated", u_uvRotated); } } } });