pine 在切换动画时闪烁

spine 切换动画完成后 闪烁一帧这个 求助。

package com.quanyecha.assets;

import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.g2d.Batch;
import com.badlogic.gdx.graphics.g2d.PolygonSpriteBatch;
import com.badlogic.gdx.graphics.g2d.TextureAtlas;
import com.badlogic.gdx.scenes.scene2d.Actor;
import com.badlogic.gdx.utils.ObjectMap;
import com.esotericsoftware.spine.Animation;
import com.esotericsoftware.spine.AnimationState;
import com.esotericsoftware.spine.AnimationStateData;
import com.esotericsoftware.spine.Event;
import com.esotericsoftware.spine.Skeleton;
import com.esotericsoftware.spine.SkeletonData;
import com.esotericsoftware.spine.SkeletonJson;
import com.esotericsoftware.spine.SkeletonRenderer;
import com.esotericsoftware.spine.AnimationState.AnimationStateListener;
import com.esotericsoftware.spine.AnimationState.TrackEntry;
import com.quanyecha.utii.State;
import com.quanyecha.utii.StateView;

public abstract class SpineAnimation extends Actor{
    SkeletonRenderer render;//spine画笔
    PolygonSpriteBatch poluginBath;//spine画布
    
    TextureAtlas platycodon;            //图片纹理
    SkeletonData playerSkeletonDate;    //骨骼数据
    
    AnimationStateData     platycodonAnimationStateData;
    AnimationState animationState;            //播放和设置动画
    Skeleton skeleton;                        //spine骨骼
    public float direction =1;
    ObjectMap<State, StateView> playerStates = new ObjectMap();
    int sacle;
    public SpineAnimation(String atlas,String jsons) {
        render = new SkeletonRenderer();    //创建画笔
        render.setPremultipliedAlpha(true);
        poluginBath = new PolygonSpriteBatch();    //创建画布
        
        platycodon = new TextureAtlas(Gdx.files.internal(atlas));    //装载纹理图片
        SkeletonJson json = new SkeletonJson(platycodon);    //解析纹理
        json.setScale(250f/625f);//设置比例
        playerSkeletonDate = json.readSkeletonData(Gdx.files.internal(jsons));//获取spine json数据
        platycodonAnimationStateData = new AnimationStateData(playerSkeletonDate);//创建动画数据
        platycodonAnimationStateData.setDefaultMix(0.25f);    //动画数据默认过度时间
        setMix();
        steupState();
        skeleton = new Skeleton(playerSkeletonDate);//创建骨骼控制器
        animationState = new AnimationState(platycodonAnimationStateData);    //创建动画控制器
        animationState.apply(skeleton);//动画添加上骨骼
        setAnimation();
        skeleton.setPosition(getX(), getY());
        skeleton.setScale(1f, 1f);                //设置比例,负数为反转动画
    }
    
    
    
    //设置动画
    boolean setAnimation(StateView state,boolean force) {
        Animation animation = state.animation;
        TrackEntry current = animationState.getCurrent(0);
        Animation oldAnimation = current == null?null:current.getAnimation();
        if(force||oldAnimation != animation) {
            if(state.animation == null) {return false;}
            if(state.animation.equals(oldAnimation)) return true;
            TrackEntry entry = animationState.setAnimation(0, state.animation, state.loop);
            if(oldAnimation != null)entry.setTrackEnd(state.startTimes.get(oldAnimation, state.defaultStartTime));
            if(!state.loop)entry.setTrackEnd(Float.MAX_VALUE);
            return true;
        }
        return false;
    }
    @Override
    public void act(float arg0) {
        // TODO Auto-generated method stub
        super.act(arg0);
         // 动画控制器更新时间步
        animationState.update(arg0);
        skeleton.setScale(direction, 1f);
          // 动画控制器控制骨骼动画
        animationState.apply(skeleton);
        animationState.setTimeScale(1);
        skeleton.setPosition(getX(), getY());
        // 骨骼逐级进行矩阵变换
        skeleton.updateWorldTransform();
    }
    
    
    @Override
    public void draw(Batch batch, float parentAlpha) {
        // TODO Auto-generated method stub
           // 绘制
        poluginBath.begin();
        render.draw(poluginBath, skeleton);
        poluginBath.end();
    }
    /**
     * 初始设置动画
     * */
    public abstract void setAnimation() ;
    /**
     * 初始设置过度时间
     * */
    public abstract void setMix() ;
    /**
     * 初始设置添加动画
     * */
    public abstract void steupState() ;
    
    public abstract class MyAnimationStateListener implements AnimationStateListener{};
}

1 在用spine+libgdx 做一个动画例子

2 解决切换动画时 出现一帧这个图片
 

你好,我是有问必答小助手。为了技术专家团更好地为您解答问题,烦请您补充下(1)问题背景详情,(2)您想解决的具体问题,(3)问题相关代码图片或者报错信息。便于技术专家团更好地理解问题,并给出解决方案。

您可以点击问题下方的【编辑】,进行补充修改问题。