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);