我在这个类的构造函数中得到一个空指针异常,我不知道为什么Slick2d Bullet

时间:2013-06-16 18:07:03

标签: java slick2d

我正在写一个平台游戏,只是编写了这个类的子弹。 我在构造函数中得到一个NPE,我看不出有什么问题,这是我的代码:

package com.ncom.src.entity;

import org.newdawn.slick.GameContainer;
import org.newdawn.slick.Graphics;
import org.newdawn.slick.Image;
import org.newdawn.slick.SlickException;
import org.newdawn.slick.geom.Vector2f;

import com.ncom.src.Camera;
import com.ncom.src.world.World;

public class Bullet extends HealthEntity {
public Vector2f velocity;
public double angle;
private int timeout = 0;

public Bullet(int lx, int ly, World w, float x, float y) {
    super(lx, ly, 5, 5, w, 0);
    double hyp =  Math.sqrt((x - 600) * (x - 600) + (y - 400) * (y - 400));
    angle = Math.asin(y - 400/ hyp);

    velocity.y = (float) Math.sin(angle) * 0.4f;
    velocity.x = (float) Math.cos(angle) * 0.4f;
}

@Override
public void render(Graphics g, Camera c) throws SlickException {
    g.drawImage(new Image("res/actors/bullet.png"), locationX + c.camModX, locationY + c.camModY);
}

@Override
public void update(GameContainer gc, int delta) throws SlickException {
    if (timeout > 400) {
        this.dead = true;
    }
    else {
        locationX += velocity.x;
        locationY += velocity.y;
        timeout += 0.4f;
    }
}
}

我基本上试图计算向量的x分量和y分量来移动子弹。构造函数中的x和y代表单击鼠标的位置。

2 个答案:

答案 0 :(得分:2)

velocitynull,这是明显的情况。或者您的World w参数可能是null并导致超类构造函数中的NPE。就我所见,这是null构造函数中唯一可能Bullet的两件事。

答案 1 :(得分:0)

如果你不能使用调试器,只需在构造函数的每一行之后放置print语句,或者你认为异常可以。