过去一小时我一直坚持这一点,我无法理解。
主要课程:
public class Main extends BasicGame{
int px = 100, py = 100;
Entity eo;
Rectangle player = new Rectangle(px, py, 16, 16);
主类中的更新功能:
public void update(GameContainer gc, int arg) throws SlickException {
if(player.intersects(eo.r)){
System.out.println("Collision");
}
实体类:
public class Entity extends BasicGame{
int x, y;
Rectangle r = new Rectangle(x, y, 16, 16);
public Entity(String n, int h, int posx, int posy){
x = posx;
y = posy;
注意:这不是代码的真实格式,我已经删除了无关紧要的东西。
我收到的错误消息:
java.lang.NullPointerException
at src.Main.update(Main.java:49)
at org.newdawn.slick.GameContainer.updateAndRender(GameContainer.java:657)
at org.newdawn.slick.AppGameContainer.gameLoop(AppGameContainer.java:408)
at org.newdawn.slick.AppGameContainer.start(AppGameContainer.java:318)
at src.Main.main(Main.java:23)
Mon Dec 19 20:35:23 CST 2011 ERROR:Game.update() failure - check the game code.
org.newdawn.slick.SlickException: Game.update() failure - check the game code.
at org.newdawn.slick.GameContainer.updateAndRender(GameContainer.java:663)
at org.newdawn.slick.AppGameContainer.gameLoop(AppGameContainer.java:408)
at org.newdawn.slick.AppGameContainer.start(AppGameContainer.java:318)
at src.Main.main(Main.java:23)
我做错了什么?
答案 0 :(得分:0)
NullPointerException可能表示player
(已初始化)或eo
为空。确实,我没有看到
eo = new Entity();
此外new Rectangle(x, y, 16, 16)
等效于0,0,16,16。然后分配给x或y将不会更改播放器矩形。
答案 1 :(得分:0)
“player.intersects(eo.r)”这一行特别可疑,容易引起此错误。我假设因此是第49行。
多个内部变量的加入而不检查它们是否正确设置通常是java中NullPointerExceptions的热点。
因此“player”为null,eo为null或r为null,或者intersects()方法返回nul。
答案 2 :(得分:0)
if(player.intersects(eo.r))
这不是一个好的代码。您应该替换它,检查播放器和eo是否都不为空,即:
if(eo != null && eo != null && player.intersects(eo.r))