Java动画 - 每帧必须有一个持续时间

时间:2015-03-22 08:22:46

标签: java animation

我是编程的新手,我遇到了问题。我按照TheNewBoston教程,添加了更多动画,现在控制台说:

  

线程中的异常" main" java.lang.RuntimeException:必须有   每帧一个持续时间

这是我的代码:

package javagame;

import org.newdawn.slick.*;
import org.newdawn.slick.state.*;

public class Play extends BasicGameState{

Animation player, movingUp, movingUp1, movingUp2, movingDown, movingDown1, movingDown2, movingLeft, movingLeft1, movingLeft2, movingRight, movingRight1, movingRight2;
Image playground;
boolean quit = false;
int[] duration = {200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200, 200};
float playerPositionX = 0;
float playerPositionY = 0;
float shiftX = playerPositionX + 320;
float shiftY = playerPositionY + 160;


public Play(int State){
}

public void init(GameContainer gc, StateBasedGame sbg) throws SlickException{
    playground = new Image("res/playground.png");
    Image[] walkUp = {new Image("res/player11.png"), new Image("res/player12.png"), new Image("res/player10.png")};
    Image[] walkDown = {new Image("res/player2.png"), new Image("res/player3.png"), new Image("res/player1.png")};
    Image[] walkLeft = {new Image("res/player5.png"), new Image("res/player6.png"), new Image("res/player4.png")};
    Image[] walkRight = {new Image("res/player8.png"), new Image("res/player9.png"), new Image("res/player7.png")};



    movingUp = new Animation(walkUp, duration, false);

    movingDown = new Animation(walkDown, duration, false);

    movingLeft = new Animation(walkLeft, duration, false);

    movingRight = new Animation(walkRight, duration, false);


    player = movingDown;

}

public void render(GameContainer gc, StateBasedGame sbg, Graphics g) throws SlickException{
    playground.draw(playerPositionX, playerPositionY);
    player.draw(shiftX, shiftY);
    g.drawString("Player's X: "+playerPositionX+"\nPlayer's Y: "+playerPositionY, 400, 20);

    if(quit==true){
        g.drawString("Resume (R)", 250, 100);
        g.drawString("Main Menu (M)", 250, 150);
        g.drawString("Quit Game (Q)", 250, 200);
        if(quit==false){
            g.clear();
        }
    }
}

public void update(GameContainer gc, StateBasedGame sbg, int delta) throws SlickException{
    Input input = gc.getInput();

    //up
    if(input.isKeyDown(Input.KEY_UP)){
        player = movingUp;
        playerPositionY += delta * .1f;
        if(playerPositionY>162){
            playerPositionY -= delta * .1f;
        }
    }
    //down
    if(input.isKeyDown(Input.KEY_DOWN)){
        player = movingDown;
        playerPositionY -= delta * .1f;
        if(playerPositionY<-600){
            playerPositionY += delta * .1f;
        }
    }
    //left
    if(input.isKeyDown(Input.KEY_LEFT)){
        player = movingLeft;
        playerPositionX += delta * .1f;
        if(playerPositionX>324){
            playerPositionX -= delta * .1f;
    }
    //right
    if(input.isKeyDown(Input.KEY_RIGHT)){
        player = movingRight;
        playerPositionX -= delta * .1f;
        if(playerPositionX<-840){
            playerPositionX += delta * .1f;}
        }   
    }    
}    

public int getID(){
    return 1;
}

}

谢谢!

1 个答案:

答案 0 :(得分:0)

第一次 Google结果“每帧必须有一个持续时间”会在同一网站上产生相同的问题: Slick Animation - There must be one duration per frame

您的持续时间数组需要与图像数组的大小相同。改为:

int[] duration = {200, 200, 200};