123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- import { _decorator, Component, SpriteFrame, Sprite} from 'cc';
- import { Game } from '../game/Game';
- const { ccclass, property } = _decorator;
- @ccclass('FrameAnimation')
- export class FrameAnimation extends Component {
- @property({type:[SpriteFrame],tooltip: "播放的帧动画类"})
- public playSFArray: Array<SpriteFrame> = [];
- //每一帧的时长
- private duration: number = 0.1;
- //播放完后的回调函数
- private endFunc : Function = null;
- //播放到第几帧回调函数
- private playIdxFunc : Function = null;
- //播放到第几帧回调函数
- private idx : number = 0;
- //是否播放帧动画
- private isPlayAnim : boolean = false;
- //记录已经播放的时间
- private playTime : number = 0;
- //是否循环播放
- private loop : boolean = true;
- //播放的精灵 播放的帧动画
- private currnSprite : Sprite = null!;
- //播放帧图片数据
- public playSFs: Array<SpriteFrame> = [];
- /**
- * 播放帧动画
- * @param noSp
- * @param clipSFs
- * @param isLoop
- * @param callback
- */
- public play(s: number = this.duration,loop: boolean = true, endf: Function = ()=>{},playFun: Function = ()=>{},idx: number = 0){
- if(!loop){
- if(this.isPlayAnim){return}
- }
- if(this.playSFArray.length > 0){
- this.playSFs = this.playSFArray;
- }
- if(!this.currnSprite){
- this.currnSprite = this.node.getComponent(Sprite);
- }
- if(this.playSFs.length > 0){
- this.isPlayAnim = true;
- this.playTime = 0;
- this.loop = loop;
- this.duration = s / this.playSFs.length;
- this.endFunc = endf;
- this.idx = idx;
- this.currnSprite.spriteFrame = this.playSFs[0];
- this.playIdxFunc = playFun;
- }else{
- this.isPlayAnim = false;
- }
- }
-
- protected update(deltaTime: number) {
- if(!this.isPlayAnim
- ||!this.currnSprite
- ||!this.currnSprite.node.active){
- return;
- }
- let g:Game = Game.I;
- if(g && g.isPause){
- return;
- }
- //累计时间,通过时间计算应该取哪一张图片展示
- this.playTime += deltaTime;
- let index : number = Math.floor(this.playTime / this.duration);
- if(this.loop){ // 循环播放
- if(index >= this.playSFs.length){
- index -= this.playSFs.length;
- this.playTime -= (this.duration * this.playSFs.length);
- }
- this.currnSprite.spriteFrame = this.playSFs[index];
- }else{
- //播放一次
- if(index >= this.playSFs.length){
- this.isPlayAnim = false;
- //如果有回调函数的处理,则调用回调函数
- this.endFunc?.();
- }else{
- this.currnSprite.spriteFrame = this.playSFs[index];
- }
- if(this.playIdxFunc && this.idx == index){
- this.playIdxFunc();
- }
- }
- }
- }
|