Cocos Creator 動畫控制


//即使playOnLoad=true,也必須調用play函數播放一個動畫,currentClip屬性才會賦值
let animation=this.getComponent(cc.Animation);
animation.playOnLoad=true;
cc.log(animation.currentClip);//ouput: null
animation.play("idle");
cc.log(animation.currentClip.name);//ouput: idle

//每幀都調用play方法播放一個動畫時,必須判斷要播放的剪輯是否已是當前剪輯,否則會一直播放停止在第一幀
if(animation.currentClip.name!="walk"){
      animation.play("walk");
}

let animationState=animation.play("idle");
animationState.time;//動畫播放的時間(注意:播放循環的的動畫剪輯時,播放完成一遍后不會重置0)

偵聽循環的動畫剪輯播放完成

let animation=this.getComponent(cc.Animation);
let animationState=animation.play("idle");
animationState.wrapMode=cc.WrapMode.Loop;
animationState.repeatCount=0;//設置循環的次數,0表示只播放一次(則不需要去設置wrapMode)
animation.on("finished",this.onFinished,this);
//private onFinished():void{}

動態修改AnimationClip.speed,AnimationSate.speed,duration不會更新

animState.speed=2;//動態修改時不會受到影響animState.duration,animState.clip.duration
animState.clip.speed=2;//動態修改時不會受到影響animState.duration,animState.clip.duration

在指定幀停止

let animState=this._animation.play("num");
animState.speed=0;
let frameNO=3;//停止的幀編號
let frameTime:number=animState.clip.curveData['comps']['cc.Sprite']['spriteFrame'][frameNO-1].frame;
this._animation.setCurrentTime(frameTime);

//完整指定幀停止的函數:
/**
 * 播放動畫到指定的sprite幀,並停止
 * @param animation cc.Animation組件
 * @param frameNO 幀編號(大於0的整數)
 * @param clipName 不填寫時播放默認動畫剪輯
 */
public static gotoAndStop(animation:cc.Animation,frameNO:number,clipName?:string):void{
	let frameNO_int=frameNO|0;
	if(frameNO_int!==frameNO||frameNO<1){
		frameNO=Math.max(frameNO_int,1);
		cc.warn("參數 frameNO 應傳入正整數");
	}
	let animState=animation.play(clipName);
	const speedRecord=animState.speed;
	animState.speed=0;
	let spriteFrameDatas:any[]=animState.clip.curveData['comps']['cc.Sprite']['spriteFrame'];
	frameNO=Math.min(frameNO,spriteFrameDatas.length);
	let frameTime:number=spriteFrameDatas[frameNO-1].frame;
	animation.setCurrentTime(frameTime);
	animState.stop();
	animState.speed=speedRecord;
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM