2011-12-20 108 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))