2013-09-29 93 views
0

四处看看,没有看到与我的特定问题相匹配的任何问题,我试图从sprite工作表中将子图像制作成动画,使用Slick的Animation方法,我得到子图像显示出来,没有错误,但它是一个静态图像,而不是动画。这里是我的代码:Java,光滑的2D,动画不动画

变量

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

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

init方法

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

回答

0

尝试把hero.update(delta);在您的更新方法的运动逻辑之后。它告诉动画运行速度有多快。