95 lines
2.4 KiB
JavaScript
95 lines
2.4 KiB
JavaScript
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
|
|
});
|