Java Libgdx-处理同一演员的不同动画

Java Libgdx-处理同一演员的不同动画,java,android,libgdx,actor,Java,Android,Libgdx,Actor,我为同一个演员对象制作了不同的动画 我想通过从主游戏屏幕类传递一个常量来在它们之间切换 这是我的主要演员: public class MainChar extends Actor { private float showTime; private Animation<TextureRegion> animation; private Animation<TextureRegion> animation2; private boolean s

我为同一个演员对象制作了不同的动画

我想通过从主游戏屏幕类传递一个常量来在它们之间切换

这是我的主要演员:

public class MainChar extends Actor {
    private float showTime;
    private Animation<TextureRegion> animation;
    private Animation<TextureRegion> animation2;
    private boolean state = false;
    private TextureAtlas texture = new TextureAtlas(Gdx.files.internal("actors/MainChar/a.pack"));//mainanim.pack
    private TextureAtlas textureFF = new TextureAtlas(Gdx.files.internal("actors/MainChar/b.pack"));
    private long longCounter = 0;
    public boolean isState() {
        return state;
    }

    public void setState(boolean state) {
        this.state = state;
    }
    public BitmapFont font;
    public MainChar(){

        font = new BitmapFont();
        animation = new Animation<TextureRegion>(1/5f, texture.getRegions());
        animation2 = new Animation<TextureRegion>(1/7f, textureFF.getRegions());
    }

    float myDelta;
    @Override
    public void act(float delta){
        super.act(delta);
        myDelta = delta;
        showTime += delta;
    }

    @Override
    public void draw(Batch batch, float parentAlpha){
        longCounter++;

        if(longCounter== 500)
            setState(true);
        super.draw(batch, parentAlpha);

        if(!isState())
            batch .draw(animation  .getKeyFrame(showTime, false), 0, 0);
        else 
            batch.draw(animation2.getKeyFrame(showTime, true), 0, 0);  
    }
}
我删掉了不太有趣的部分。。。 由于我是一名初学者,我对libgdx做了一些研究,但在libgdx生命周期中一切都在变化的情况下,找不到在运行时这样做的正确方法

如果您注意到我使用delta切换动画,但这只是一个技巧,我想在运行时试验切换决策


谢谢

您可以这样尝试:

public class MainChar extends Actor {

    private float showTime;
    private Animation<TextureRegion> animation;
    private boolean state = false;
    private long longCounter = 0;

    public BitmapFont font;
    public MainChar(Animation animation){

        font = new BitmapFont();
        this.animation = animation;
    }

    public void setAnimation(Animation animation){
       this.animation=animation;
    }

    float myDelta;
    @Override
    public void act(float delta){
        super.act(delta);
        myDelta = delta;
        showTime += delta;
    }

    @Override
    public void draw(Batch batch, float parentAlpha){

        super.draw(batch, parentAlpha);
        batch.draw(animation2.getKeyFrame(showTime), 0, 0);  
    }
}

您可以这样尝试:

public class MainChar extends Actor {

    private float showTime;
    private Animation<TextureRegion> animation;
    private boolean state = false;
    private long longCounter = 0;

    public BitmapFont font;
    public MainChar(Animation animation){

        font = new BitmapFont();
        this.animation = animation;
    }

    public void setAnimation(Animation animation){
       this.animation=animation;
    }

    float myDelta;
    @Override
    public void act(float delta){
        super.act(delta);
        myDelta = delta;
        showTime += delta;
    }

    @Override
    public void draw(Batch batch, float parentAlpha){

        super.draw(batch, parentAlpha);
        batch.draw(animation2.getKeyFrame(showTime), 0, 0);  
    }
}

这个代码不起作用吗?如果不是,代码的当前输出是什么?corde工作,第一个动画完美地显示,并且在一段时间后切换。如果您注意到我使用delta切换动画,但这只是一个技巧,我想在运行时试验切换决定。现在通过计数器,您正在更改MainChar角色的动画,否则请保留角色的引用并调用setState()方法,当您希望更改屏幕上演员的动画时。setState仅接受布尔值…我希望能够处理多个动画,而不仅仅是2。还有别的办法吗?我发现名称变量…应该用于此目的,还是不好的做法?thanksmaybe userObject…此代码是否不起作用?如果不是,代码的当前输出是什么?corde工作,第一个动画完美地显示,并且在一段时间后切换。如果您注意到我使用delta切换动画,但这只是一个技巧,我想在运行时试验切换决定。现在通过计数器,您正在更改MainChar角色的动画,否则请保留角色的引用并调用setState()方法,当您希望更改屏幕上演员的动画时。setState仅接受布尔值…我希望能够处理多个动画,而不仅仅是2。还有别的办法吗?我发现名称变量…应该用于此目的,还是不好的做法?感谢可能的用户对象。。。。
TextureAtlas texture = new TextureAtlas(Gdx.files.internal("actors/MainChar/a.pack"));
Animation animation = new Animation<TextureRegion>(1/5f, texture.getRegions());

private TextureAtlas textureFF = new TextureAtlas(Gdx.files.internal("actors/MainChar/b.pack"));
Animation animation2 = new Animation<TextureRegion>(1/7f, textureFF.getRegions());
...
...
create number of Animation in your screen 


 MainChar mainChar=new MainChar(animation);
 stage.addActor(mainChar);
 mainChar.setAnimation(animation2);