Беда со спрайтовой анимацией slick2d
У нас возникают проблемы с анимацией нашего персонажа в java slick2d игре. Учебник, который я видел, показывает, как я это делаю. Прямо сейчас он показывает только 1-е изображение при движении влево или вправо. Он никогда не переключается между двумя изображениями, установленными в walkLeft и walkRight.
import org.newdawn.slick.*;
import org.newdawn.slick.state.*;
public class Game extends BasicGameState {
Animation cowboy;
Animation movingLeft;
Animation movingRight;
Image background;
boolean quit = false;
int[] animationDuration = {200,200};
float cowboyPositionX = 0;
float cowboyPositionY = -370;
float shiftX = cowboyPositionX + 200;
float shiftY = cowboyPositionY + 830;
public Game(int state) {
}
public void init(GameContainer gc, StateBasedGame sbg)
throws SlickException {
background = new Image("images/background.png");
Image[] walkLeft = { new Image("images/cowboyleft1.png"), new Image("images/cowboyleft2.png") };
Image[] walkRight = { new Image("images/cowboyright1.png"), new Image("images/cowboyright2.png") };
movingLeft = new Animation(walkLeft, animationDuration, false);
movingRight = new Animation(walkRight, animationDuration, false);
cowboy = movingRight;
}
public void render(GameContainer gc, StateBasedGame sbg, Graphics g)
throws SlickException {
background.draw(cowboyPositionX, cowboyPositionY);
cowboy.draw(shiftX, shiftY);
g.drawString("Cowboy's X:" + cowboyPositionX + "\nCowboy's Y: "
+ cowboyPositionY, 400, 20);
}
public void update(GameContainer gc, StateBasedGame sbg, int delta)
throws SlickException {
Input input = gc.getInput();
if (input.isKeyDown(Input.KEY_LEFT)) {
cowboy = movingLeft;
cowboyPositionX += horizontalSpeed;
if (cowboyPositionX > 0) {
cowboyPositionX -= delta * horizontalSpeed;
}
}
if (input.isKeyDown(Input.KEY_RIGHT)) {
cowboy = movingRight;
cowboyPositionX -= horizontalSpeed;
if (cowboyPositionX < -2975.0) {
cowboyPositionX += delta * horizontalSpeed;
}
}
public int getID() {
return 1;
}
}
1 ответ
В вашем методе обновления попробуйте вставить cowboy.update(delta);
это должно работать. Это сработало для программы, над которой я работал.