我是编程的新手,我遇到了问题。我按照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;
}
}
谢谢!
答案 0 :(得分:0)
第一次 Google结果“每帧必须有一个持续时间”会在同一网站上产生相同的问题: Slick Animation - There must be one duration per frame
您的持续时间数组需要与图像数组的大小相同。改为:
int[] duration = {200, 200, 200};