Беда со спрайтовой анимацией 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); это должно работать. Это сработало для программы, над которой я работал.

Другие вопросы по тегам