2011-12-20 106 views
0

我一直在这个过去的一小时,我只是无法弄清楚。检测单独类中的矩形之间的碰撞

主要类:主类

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

哪一行是'Main'类的'49行'? 'NullPointerException'意味着你引用了一个你不认为是'null'的对象。这不应该与碰撞检测本身有关。 – jefflunt 2011-12-20 02:50:15

+0

为了尽快提供更好的帮助,请发布[SSCCE](http://sscce.org/)。 – 2011-12-20 03:59:55

回答

0

NullPointerException可能表示player(已初始化)或eo为空。事实上,我没有看到

eo = new Entity(); 

此外new Rectangle(x, y, 16, 16)以上,相当于0,0,16,16,又重新分配给X或Y不会改变玩家矩形。

0

行“player.intersects(eo.r)”特别可疑并且容易导致此错误。我假设这是第49行。

多个内部变量的加入而不检查它们是否正确设置通常是Java中的NullPointerExceptions的热点。

因此,无论“player”为null,eo为null还是r为null,或者intersects()方法返回nul。

0
if(player.intersects(eo.r)) 

这不是一个好的代码。如果玩家和eo都不是空值,则应替换它,即:

if(eo != null && eo != null && player.intersects(eo.r))