2011-12-20 11 views
0

私は過去1時間このことに固執していますが、私はそれを理解できません。別のクラスの四角形間の衝突を検出する

メインクラス:メインクラスで

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"); 
     } 

Entityクラス:

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'クラスの' line 49'ですか? 'NullPointerException'は、' null'とは思わないオブジェクトを参照していることを意味します。これは、衝突検出自体とは関係がありません。 – jefflunt

+0

すぐに役立つように、[SSCCE](http://sscce.org/)を投稿してください。 –

答えて

0

NullPointerExceptionは、おそらくplayer(初期化された)またはeoがnullであることを示します。確かに私は

上記
eo = new Entity(); 

さらにnew Rectangle(x, y, 16, 16)はxまたはyに代入すると、プレーヤーの四角形を変更することはありません、16、0、0と同等の16、その後で表示されません。

0

「player.intersects(eo.r)」という行は特に疑わしく、このエラーの原因となりがちです。私はこのように行49と仮定しています。

正しく設定されているかどうかをチェックせずに複数の内部変数を使用することは、通常javaのNullPointerExceptionsのホットスポットです。

したがって、 "player"がnull、eoがnull、またはrがnullの場合、またはintersects()メソッドがnulを返している場合。

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

これは良いコードではありません。 playerとeoの両方がヌルでないか、つまり次のようなものかどうかを確認する必要があります。

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