Sun_moves/assets/Script/CtrlFluxayTexture.js
2024-05-28 11:38:16 +08:00

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);
}
}
}
});