我正在使用 slick2D 创建一个简单的 java 游戏。不幸的是,我的 Java 技能并不简单。这个游戏将是一个内存游戏,因为我认为它制作起来很简单。我遇到的问题之一是我有一个 NormalMode 类和一个 Square 类。我在正常模式类中创建了一个 Square 对象来调用 Square 的方法。所以,我试图调用它的一个以“图形 g”为边界的方法,结果我得到一个空指针异常错误(或者其他我不知道的东西)。
Square类:(该类最后一个方法暂未完成)
package data.src;
import java.util.Random;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Image;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.state.StateBasedGame;
public class Square {
private StateBasedGame game;
boolean correct;
boolean clickable;
boolean clicked;
boolean started;
int squares;
int squareX;
int squareY;
public Image squareIncorrect;
public Image squareCorrect;
public Square() {
}
public boolean checkCorrect(){
return correct;
}
public boolean checkClickable(){
return clickable;
}
public boolean checkClicked(){
return clicked;
}
public void squareStart(int x ,int y, Graphics g){
if(correct == true){
g.drawImage(squareCorrect, x, y);
}
else if(correct == false){
g.drawImage(squareIncorrect, x, y);
}
g.drawString("Remember the blue squares!", x, y);
try {
wait(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
started = true;
while(started == true){
try {
squareCorrect = new Image("res/squareCorrect");
} catch (SlickException e) {
e.printStackTrace();
}
}
}
public void createRandom(){
Random rand = new Random();
int sRand = rand.nextInt(1);
if(sRand == 0){
correct = false;
clickable = true;
clicked = false;
}
else if(sRand == 1){
correct = true;
clickable = true;
clicked = false;
squares++;
}
}
public void youWin(int x, int y, Graphics g){
if(squares == 0){
g.drawString("You win!", x, y);
game.enterState(0);
}
}
}
普通模式类:
package data.src;
import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.state.BasicGameState;
import org.newdawn.slick.state.StateBasedGame;
public class NormalMode extends BasicGameState {
private Square[][] square = new Square[4][4];
public NormalMode() {
}
@Override
public void init(GameContainer arg0, StateBasedGame Game)throws SlickException {
for(int i = 0; i < square.length; i++){
for(int j = 0; j < square.length; j++){
square[i][j] = new Square();
square[i][j].createRandom();
}
}
}
@Override
public void render(GameContainer container, StateBasedGame game, Graphics g)
throws SlickException{
square[1][1].squareStart(40, 300, g);
}
@Override
public void update(GameContainer container, StateBasedGame game, int delta)
throws SlickException {
}
@Override
public int getID() {
return 3;
}
}
P.S:如果我的代码看起来很愚蠢,请原谅我胡说八道。
错误:
Sun Jan 05 01:17:25 MST 2014 ERROR:null
java.lang.NullPointerException
at org.newdawn.slick.Graphics.drawImage(Graphics.java:1384)
at org.newdawn.slick.Graphics.drawImage(Graphics.java:1433)
at data.src.Square.squareStart(Square.java:46)
at data.src.NormalMode.render(NormalMode.java:32)
at org.newdawn.slick.state.StateBasedGame.render(StateBasedGame.java:199)
at org.newdawn.slick.ScalableGame.render(ScalableGame.java:158)
at org.newdawn.slick.GameContainer.updateAndRender(GameContainer.java:688)
at org.newdawn.slick.AppGameContainer.gameLoop(AppGameContainer.java:411)
at org.newdawn.slick.AppGameContainer.start(AppGameContainer.java:321)
at data.src.Core.main(Core.java:30)
Sun Jan 05 01:17:25 MST 2014 ERROR:Game.render() failure - check the game code.
org.newdawn.slick.SlickException: Game.render() failure - check the game code.
at org.newdawn.slick.GameContainer.updateAndRender(GameContainer.java:691)
at org.newdawn.slick.AppGameContainer.gameLoop(AppGameContainer.java:411)
at org.newdawn.slick.AppGameContainer.start(AppGameContainer.java:321)
at data.src.Core.main(Core.java:30)
最佳答案
squareCorrect
和 squareIncorrect
为空,因为您在使用变量之前没有设置它们。
您应该在声明它们之后立即加载它们:
public Image squareIncorrect;
public Image squareCorrect;
{
squareIncorrect = new Image("res/squareCorrect");
squareIncorrect = new Image("res/squareIncorrect");
}
关于java - 调用以 Graphics g 为边界的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20931464/