Java 动画中的过渡帧
好吧,这将是一件非常简单的事情,但出于某种原因,我只是没有抓住它 我有一个站着的动画和一个移动的动画我想要的是在两个动画之间播放一个单帧转换,我似乎无法完成它(用布尔函数尝试) 这是我的代码,也许有人能帮上忙 另外,我会将面向左/右的动画分开,有没有办法只翻转单个动画 来自noob程序员的提前感谢——以下是我的代码,其中删掉了一些不相关的内容Java 动画中的过渡帧,java,animation,2d,libgdx,Java,Animation,2d,Libgdx,好吧,这将是一件非常简单的事情,但出于某种原因,我只是没有抓住它 我有一个站着的动画和一个移动的动画我想要的是在两个动画之间播放一个单帧转换,我似乎无法完成它(用布尔函数尝试) 这是我的代码,也许有人能帮上忙 另外,我会将面向左/右的动画分开,有没有办法只翻转单个动画 来自noob程序员的提前感谢——以下是我的代码,其中删掉了一些不相关的内容 public class Player extends Sprite implements InputProcessor { private Vecto
public class Player extends Sprite implements InputProcessor {
private Vector2 velocity = new Vector2();
private float speed = 60 * 2, gravity = 60 * 2.2f, animationTime = 0;
private boolean canJump;
private boolean attacking;
private boolean starting = true;
private Animation still, left, right, attack, start;
private TiledMapTileLayer collisionLayer;
public Player(Animation still, Animation left, Animation right, Animation attack, Animation start, TiledMapTileLayer collisionLayer) {
super(still.getKeyFrame(0));
this.still = still;
this.left = left;
this.right = right;
this.attack = attack;
this.start = start;
this.collisionLayer = collisionLayer;
setSize(getWidth(), getHeight() /* * 1.5f*/);
//setScale((float) 1.4);
}
@Override
public void draw(SpriteBatch spriteBatch) {
update(Gdx.graphics.getDeltaTime());
super.draw(spriteBatch);
// update animation
animationTime += delta;
setRegion(
velocity.x < 0 ? left.getKeyFrame(animationTime) :
velocity.x > 0 ? right.getKeyFrame(animationTime) :
attacking == true ? attack.getKeyFrame(animationTime) :
still.getKeyFrame(animationTime));
}
@Override
public boolean keyDown(int keycode) {
switch(keycode) {
case Keys.W:
if(canJump) {
velocity.y = speed / 1.8f;
canJump = false;
}
break;
case Keys.A:
velocity.x = -speed;
animationTime = 0;
break;
case Keys.D:
velocity.x = speed;
animationTime = 0;
case Keys.I:
attacking = true;
animationTime = 0.15f;
}
return true;
}
@Override
public boolean keyUp(int keycode) {
switch(keycode) {
case Keys.A:
case Keys.D:
velocity.x = 0;
animationTime = 0;
case Keys.I:
animationTime = 0;
attacking = false;
}
return true;
}
我要做的是处理将使用状态渲染的动画:
public static final int STATE_IDLE = 0;
public static final int STATE_WALKINGLEFT = 1;
public static final int STATE_WALKINGRIGHT = 2;
public static final int STATE_TRANSITIONLEFT = 3;
public static final int STATE_TRANSITIONRIGHT = 4;
public int state = STATE_IDLE;
然后使用输入将状态更改为transition:
case Keys.A:
state = STATE_TRANSITIONLEFT;
velocity.x = -speed;
animationTime = 0;
break;
case Keys.D:
state = STATE_TRANSITIONRIGHT;
velocity.x = speed;
animationTime = 0;
在渲染方法中,等待一段时间,然后将过渡状态更改为漫游状态:
if(animationTime>0.1F){ //your transition frame time
if(state == STATE_TRANSITIONLEFT){
state = STATE_WALKINGLEFT;
animationTime = 0;
}
if(state == STATE_TRANSITIONRIGHT){
state = STATE_WALKINGRIGHT;
animationTime = 0;
}
}
如果输入:
case Keys.A:
case Keys.D:
velocity.x = 0;
state == STATE_IDLE;
animationTime = 0;
最后,渲染当前动画:
switch(state){
case STATE_IDLE:
//draw idle animation
break;
case STATE_TRANSITIONLEFT:
//draw transitionleft frame
break;
case STATE_WALKINGLEFT:
//draw walkingleft animation
break;
//etc...
}
最后一个问题。是的,您可以翻转动画的区域:
switch(state){
case STATE_IDLE:
//draw idle animation
break;
case STATE_TRANSITIONLEFT:
//draw transitionleft frame
break;
case STATE_WALKINGLEFT:
//draw walkingleft animation
break;
//etc...
}