0

周りを見回しても、私の特定の問題に一致する質問はありませんでした.Slickのアニメーションメソッドを使用して、スプライトシートからサブイメージを取得してアニメーション化しようとしています.サブイメージが表示され、エラーはありませんが、アニメーションではなく静止画像です。これが私のコードです:

変数

public class World extends BasicGameState{
Animation hero, heroUp, heroDown, heroLeft, heroRight;

Image world;
boolean showMenu = false;
int[] duration = {500,500,500};

初期化メソッド

public void init(GameContainer gc, StateBasedGame sbg) throws SlickException{
Image sprite = new Image("res/Sprites.png");
world = new Image("res/world.png");

Image[] moveUp = {sprite.getSubImage(378, 106, 28, 33),sprite.getSubImage(411, 105, 28, 33),sprite.getSubImage(346, 105, 28, 33)};

Image[] moveDown = {sprite.getSubImage(378, 10, 28, 33),sprite.getSubImage(411, 9, 28, 33),sprite.getSubImage(346, 10, 28, 33)};

Image[] moveLeft = {sprite.getSubImage(378, 42, 28, 33),sprite.getSubImage(411, 41, 28, 33),sprite.getSubImage(346, 42, 28, 33)};

Image[] moveRight = {sprite.getSubImage(378, 74, 28, 33),sprite.getSubImage(411, 73, 28, 33),sprite.getSubImage(346, 74, 28, 33)};

heroUp = new Animation(moveUp, duration, false);
heroDown = new Animation(moveDown, duration, false);
heroLeft = new Animation(moveLeft, duration, false);
heroRight = new Animation(moveRight, duration, false);

hero = heroDown;
    }

と私の更新方法

public void update(GameContainer gc, StateBasedGame sbg, int delta)throws SlickException {
    Input input = gc.getInput();
    if(input.isKeyDown(Input.KEY_W)){
        hero = heroUp;
        heroY+=delta*.1f;
        if(heroY>300){
            heroY-=delta*.1f;
        }
    }
    if(input.isKeyDown(Input.KEY_S)){
        hero = heroDown;
        heroY-=delta*.1f;
        if(heroY<-3698){
            heroY+=delta*.1f;
        }
    }
    if(input.isKeyDown(Input.KEY_A)){
        hero = heroLeft;
        heroX+=delta*.1f;
        if(heroX>406){
            heroX-=delta*.1f;
        }
    }
    if(input.isKeyDown(Input.KEY_D)){
        hero = heroRight;
        heroX-=delta*.1f;
        if(heroX<-3670){
            heroX+=delta*.1f;
        }
    }
    if(input.isKeyDown(Input.KEY_ESCAPE)){
        showMenu=true;
    }
    if(showMenu==true){
        if(input.isKeyDown(Input.KEY_R))
            showMenu=false;
        if(input.isKeyDown(Input.KEY_M)){
            showMenu=false;
            sbg.enterState(0);
        }
        if(input.isKeyDown(Input.KEY_Q))
            System.exit(0);
    }
}
4

1 に答える 1

0

hero.update(delta);移動ロジックの後に更新メソッドを入れてみてください。アニメーションの実行速度を示します。

于 2013-10-01T10:52:24.170 に答える