检测单独类中矩形之间的碰撞

时间:2011-12-20 02:46:27

标签: java collision-detection

过去一小时我一直坚持这一点,我无法理解。

主要课程:

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)

我做错了什么?

3 个答案:

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