2011-12-20 4 views
0

지난 1 시간 동안이 문제에 봉착했습니다. 알아낼 수 없습니다.별도의 클래스에서 직사각형 간의 충돌 감지

Main 클래스 : 메인 클래스의

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임을 나타냅니다. 실제로는 I

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)) 

이것은 좋은 코드가 아닙니다. 플레이어와 전자가 둘 다 null이 아닌 것으로 확인해야합니다 (예 :