消消方块阵换皮表情
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

55 lines
1.7 KiB

import { _decorator, Component, Node, Rect, Sprite, Vec2 } from 'cc';
const { ccclass, property } = _decorator;
@_decorator.ccclass('ScrollUV')
export class ScrollUV extends Component {
@property({ type: Sprite })
sprite: Sprite = null;
@property
public scrollSpeed = new Vec2(0.1, 0); // 横向滚动速度,默认每帧偏移0.1
private baseUvs: number[] = [];
onLoad() {
if (!this.sprite) {
this.sprite = this.getComponent(Sprite);
}
// 保存原始 UV 数据
const spriteFrame = this.sprite.spriteFrame;
if (spriteFrame) {
const uvs = spriteFrame.uv;
this.baseUvs = [...uvs];
}
}
update(deltaTime: number) {
let offsetX = (Date.now() * this.scrollSpeed.x) % 1;
let offsetY = (Date.now() * this.scrollSpeed.y) % 1;
// const rect = new Rect(offsetX, 0, 1, 1); // 横向滚动
// this.sprite.spriteFrame.setOffset(rect);
// const newUvs = [...this.baseUvs];
// for (let i = 0; i < newUvs.length; i += 4) {
// newUvs[i] = (this.baseUvs[i] + offsetX) % 1;
// newUvs[i + 1] = (this.baseUvs[i + 1] + offsetY) % 1;
// newUvs[i + 2] = (this.baseUvs[i + 2] + offsetX) % 1;
// newUvs[i + 3] = (this.baseUvs[i + 3] + offsetY) % 1;
// }
// // 注意:需要重新创建 SpriteFrame 或者使用自定义材质来支持动态 UV
// // 这里我们尝试直接修改 spriteFrame.uv(仅限非图集)
// const sf = this.sprite.spriteFrame;
// if (sf && !sf.isRotated()) {
// sf.uv = newUvs;
// this.sprite.spriteFrame = null;
// this.sprite.spriteFrame = sf;
// }
}
}