微风飘渺 2021-04-05 17:12 采纳率: 0%
浏览 33
已结题

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条回答 默认 最新

  • 有问必答小助手 2021-04-06 10:04
    关注

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

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

    评论

报告相同问题?

悬赏问题

  • ¥20 ic卡dump文件校检码解密
  • ¥15 关于:接收到的数据不是有效的JSON格式
  • ¥15 apdl语言如何增加受力分析
  • ¥15 算法对比:学校优化算法与蚁群算法对比
  • ¥15 机电一体化系统设计说明书
  • ¥20 sgy数据提取地震波速,有人能回答吗小馋
  • ¥20 c#实现打开word的功能,并且需要安装成windows服务,word打不开怎么办
  • ¥15 python用ARIMA时间预测模型预测数据出错,急!
  • ¥30 为什么后端传给前端vue的河流json数据不在地图中显示出来
  • ¥50 关于弹性波动方程求解的问题: