我正在尝试做一个游戏的启动画面。我搜索了Google无济于事。我按照这个教程here,它为他工作。我的代码有点不同,但看起来有点像他的。这里是我的代码:我不能用slick2D解决这个问题Java
Game类:
import org.newdawn.slick.*;
import org.newdawn.slick.state.*;
public class Game extends StateBasedGame {
public static final String gamename = "Life - Alpha";
public static int menu = 1;
public static int play = 2;
public static int splash = 0;
public Game(String gamename) {
super(gamename);
}
public void initStatesList(GameContainer gc) throws SlickException {
this.getState(menu).init(gc, this);
this.getState(play).init(gc, this);
this.enterState(0);
}
public static void main(String[] args) {
AppGameContainer app;
try {
app = new AppGameContainer(new Game(gamename));
app.setDisplayMode(800, 600, false);
app.start();
} catch (SlickException e) {
e.printStackTrace();
}
}
}
Menu类:
import org.lwjgl.input.Mouse;
import org.newdawn.slick.*;
import org.newdawn.slick.state.*;
public class Menu extends BasicGameState {
public Menu(int state) {
}
public void init(GameContainer gc, StateBasedGame sbg) throws SlickException {
}
public void render(GameContainer gc, StateBasedGame sbg, Graphics g) throws SlickException {
Image back = new Image("res/Back.png");
g.drawImage(back, 0, 0);
Image panel = new Image("res/Panel.png");
g.drawImage(panel, 240, 100);
Image logo = new Image("res/Life Alpha.png");
g.drawImage(logo, 290, 130);
Image playButton = new Image("res/Play.png");
g.drawImage(playButton, 330, 310);
Image exitButton = new Image("res/Exit.png");
g.drawImage(exitButton, 330, 370);
}
public void update(GameContainer gc, StateBasedGame sbg, int delta) throws SlickException {
Input input = gc.getInput();
int xpos = Mouse.getX();
int ypos = Mouse.getY();
if((xpos > 330 && xpos < 480) && (ypos > 250 && ypos < 290)) {
if(input.isMousePressed(0)) {
sbg.enterState(2);
}
}
}
public int getID() {
return 0;
}
}
PLAY类:
import org.newdawn.slick.*;
import org.newdawn.slick.state.*;
public class Play extends BasicGameState {
public Play(int state) {
}
public void init(GameContainer gc, StateBasedGame sbg) throws SlickException {
}
public void render(GameContainer gc, StateBasedGame sbg, Graphics g) throws SlickException {
Image back = new Image("res/Back.png");
g.drawImage(back, 0, 0);
Image panel = new Image("res/Panel2.png");
g.drawImage(panel, 170, 100);
}
public void update(GameContainer gc, StateBasedGame sbg, int delta) throws SlickException {
}
public int getID() {
return 1;
}
}
SplashScreen类:
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Image;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.state.BasicGameState;
import org.newdawn.slick.state.StateBasedGame;
public class SplashScreen extends BasicGameState {
Image splash;
private int elapsedTime;
private final int DELAY = 3000;
public SplashScreen(int state) {
}
public void init(GameContainer gc, StateBasedGame sbg) throws SlickException {
splash = new Image("res/SplashScreen.png");
}
public void render(GameContainer gc, StateBasedGame sbg, Graphics g) throws SlickException {
g.drawImage(splash, 0, 0);
}
public void update(GameContainer gc, StateBasedGame sbg, int delta) throws SlickException {
elapsedTime += delta;
if(elapsedTime >= DELAY) {
sbg.enterState(1);
}
}
public int getID() {
return 0;
}
}
我得到的错误是:
周六4月27日22时48分01秒EST 2013 INFO:油滑构建#274
周六4月27日22时48分01秒EST 2013 INFO:LWJGL版本:2.8.5
周六年04月27 22点48分01秒EST 2013 INFO:OriginalDisplayMode:1366 * 768×32 @ 60Hz的
星期六年04月27 22:48:0 1 EST 2013 INFO:TargetDisplayMode:800×600×0 @ 0Hz时
周六年04月27 22点48分01秒EST 2013 INFO:启动显示800×600
周六年04月27 22点48分01秒EST 2013 INFO:使用Java的PNG装载机=真
周六4月27日22时48分01秒EST 2013 INFO:控制器不提供
异常线程 “main” 显示java.lang.NullPointerException
在mms001.Game.initStatesList( Game.java:18)
在org.newdawn.slick.state.StateBasedGame.init(StateBasedGame.java:164)
在org.newdawn.slick.AppGameContainer.setup(AppGameContainer.java:390)
在有机newdawn.slick.AppGameContainer.start(AppGameContainer.java:314)
在mms001.Game.main(Game.java:29)
改为使用['SplashScreen'](http://docs.oracle.com/javase/7/docs/api/java/awt/SplashScreen.html)。 – 2013-04-27 12:54:28
oops ...我在代码中发现了一些错误。我修正了它,但是现在'splash screen'完成显示后,它进入'play'状态,而不是'menu'。我不知道什么是错的! – Maquaree 2013-04-27 13:07:11