+ 龙怪 动画脚本 兼容2种动画

This commit is contained in:
2025-07-18 17:24:38 +08:00
parent 3b569068d4
commit 8676b5340e
61 changed files with 6094 additions and 20413 deletions

View File

@@ -1,4 +1,4 @@
import { _decorator, CCClass, Component, sp } from "cc";
import { _decorator, CCClass, Component, sp,Animation} from "cc";
const { ccclass, property } = _decorator;
@ccclass('HeroAnmComp')
@@ -6,56 +6,70 @@ export default class HeroAnmComp extends Component{
mixTime:number= 0.2;
private spine?: sp.Skeleton;
private spine: sp.Skeleton;
private _hasStop = true;
private anm:Animation
private is_spine:boolean=false
onLoad () {
var spine = this.spine = this.getComponent('sp.Skeleton') as sp.Skeleton;
this._setMix('Walking', 'Idle');
this._setMix('Walking', 'Attacking');
this._setMix('Walking', 'Taunt');
this._setMix('Idle', 'Attacking');
this._setMix('Idle', 'Taunt');
this._setMix('Idle', 'Walking');
this._setMix('Attacking', 'Idle');
this._setMix('Attacking', 'Walking');
this._setMix('Taunt', 'Walking');
this._setMix('Taunt', 'Idle');
spine.setCompleteListener((trackEntry) => {
var animationName = trackEntry.animation ? trackEntry.animation.name : "";
if (animationName === 'Attacking'||animationName==='Taunt'||animationName==='Hurt') {
this.spine!.clearTrack(1);
}
var loopCount = Math.floor(trackEntry.trackTime / trackEntry.animationEnd);
// console.log("[track %s][animation %s] complete: %s", trackEntry.trackIndex, animationName, loopCount);
});
spine.setEventListener(((trackEntry:any, event:any) => {
var animationName = trackEntry.animation ? trackEntry.animation.name : "";
// console.log("[track %s][animation %s] event: %s, %s, %s, %s", trackEntry.trackIndex, animationName, event.data.name, event.intValue, event.floatValue, event.stringValue);
}) as any);
if(this.getComponent('sp.Skeleton')){
this.is_spine=true
this.spine=this.getComponent('sp.Skeleton') as sp.Skeleton;
var spine = this.spine = this.getComponent('sp.Skeleton') as sp.Skeleton;
this._setMix('Walking', 'Idle');
this._setMix('Walking', 'Attacking');
this._setMix('Walking', 'Taunt');
this._setMix('Idle', 'Attacking');
this._setMix('Idle', 'Taunt');
this._setMix('Idle', 'Walking');
this._setMix('Attacking', 'Idle');
this._setMix('Attacking', 'Walking');
this._setMix('Taunt', 'Walking');
this._setMix('Taunt', 'Idle');
spine.setCompleteListener((trackEntry) => {
var animationName = trackEntry.animation ? trackEntry.animation.name : "";
if (animationName === 'Attacking'||animationName==='Taunt'||animationName==='Hurt') {
this.spine!.clearTrack(1);
}
var loopCount = Math.floor(trackEntry.trackTime / trackEntry.animationEnd);
// console.log("[track %s][animation %s] complete: %s", trackEntry.trackIndex, animationName, loopCount);
});
spine.setEventListener(((trackEntry:any, event:any) => {
var animationName = trackEntry.animation ? trackEntry.animation.name : "";
// console.log("[track %s][animation %s] event: %s, %s, %s, %s", trackEntry.trackIndex, animationName, event.data.name, event.intValue, event.floatValue, event.stringValue);
}) as any);
}else{
this.is_spine=false
this.anm=this.getComponent(Animation)
}
this._hasStop = false;
}
// OPTIONS
toggleDebugSlots () {
if(!this.is_spine) return
this.spine!.debugSlots = !this.spine?.debugSlots;
}
toggleDebugBones () {
if(!this.is_spine) return
this.spine!.debugBones = !this.spine?.debugBones;
}
toggleDebugMesh () {
if(!this.is_spine) return
this.spine!.debugMesh = !this.spine?.debugMesh;
}
toggleUseTint () {
if(!this.is_spine) return
this.spine!.useTint = !this.spine?.useTint;
}
toggleTimeScale () {
if(!this.is_spine) return
if (this.spine!.timeScale === 1.0) {
this.spine!.timeScale = 0.3;
}
@@ -72,24 +86,45 @@ export default class HeroAnmComp extends Component{
}
move () {
if (this._hasStop) {
this.spine?.setToSetupPose();
if(!this.is_spine) {
this.anm?.play('move')
}else{
if (this._hasStop) {
this.spine?.setToSetupPose();
}
this.spine?.setAnimation(0, 'Walking', true);
this._hasStop = false;
}
this.spine?.setAnimation(0, 'Walking', true);
this._hasStop = false;
}
atk () {
this.spine?.setAnimation(1, 'Attacking', false);
if(!this.is_spine) {
this.anm?.play('atk')
}else{
this.spine?.setAnimation(1, 'Attacking', false);
}
}
max () {
this.spine?.setAnimation(1, 'Taunt', false);
if(!this.is_spine) {
this.anm?.play('atk')
}else{
this.spine?.setAnimation(1, 'Taunt', false);
}
}
atked () {
this.spine?.setAnimation(1, 'Hurt', false);
if(!this.is_spine) {
this.anm?.play('move')
}else{
this.spine?.setAnimation(1, 'Hurt', false);
}
}
idle () {
this.spine?.setToSetupPose();
this.spine?.setAnimation(0, 'Idle', true);
if(!this.is_spine) {
this.anm?.play('move')
}else{
this.spine?.setToSetupPose();
this.spine?.setAnimation(0, 'Idle', true);
}
}
_setMix (anim1: string, anim2: string) {