项目符号不会自行删除

时间:2019-02-07 14:48:05

标签: java greenfoot

我目前正在尝试制作一个小游戏。目的是四处拍摄和收集物品。我已经弄清楚如何拍摄自己的意图。但是,我的子弹超出范围后并没有被移除,这给我带来了java.lang.NullPointerException错误。任何帮助将不胜感激!

public class Hero extends Player {

    public int bulletCount = 0;

    public void act() {
        checkFire();
        bulletCount++;
    }

    public void checkFire() {
        if (bulletCount % 10 == 0) {
            bulletCount = 0;

            if (Greenfoot.isKeyDown("space")) {
                int x = getX(), y = getY();
                Bullet bullet = new Bullet(x, y, rotation);               
                getWorld().addObject(bullet, getX(), getY());            
            }
        }
    }
}



public class Bullet extends Player {

    private int speed = 10;

    public Bullet(int x, int y, int rotation) {
        setLocation(x,y);
        setRotation(rotation);
    }

    public void act() {
        move(speed);
        checkBoundaries();
    }

    public void checkBoundaries() {
        if (getX() > getWorld().getWidth() - 10) 
            getWorld().removeObject(this);
        else if (getX() < 10) 
            getWorld().removeObject(this);

        if (getY() > getWorld().getHeight() - 10) 
            getWorld().removeObject(this);
        else if (getY() < 10) 
            getWorld().removeObject(this);
    }
}

public class Enemy extends Actor{

    public void killHero()
{
    Actor hero1 = getOneIntersectingObject(Hero.class);
    if(hero1 != null) {                  
        World world;
        world = getWorld();
        LivesCounter livescounter = new LivesCounter();
        this.setLocation(Greenfoot.getRandomNumber(world.getWidth()), Greenfoot.getRandomNumber(world.getHeight()));
        hero.lives--;
    }
}


public class GameScreen extends World
{

public GameScreen()
{    
    super(600, 400, 1); 
    prepare();
}

private void prepare()
{
    Hero hero = new Hero();
    addObject(hero,114,197);
    Enemy enemy = new Enemy();
    Asteroid asteroid = new Asteroid();
    addObject(asteroid,150,72);
    Girl girl = new Girl();
    addObject(girl,285,72);
    Alien alien = new Alien();
    addObject(alien,503,191);
    Boy boy = new Boy();
    addObject(boy,477,75);
}

}

由于某些奇怪的原因,子弹可以击中并摧毁我的小行星,但不能击中我的外星人,但是当我的子弹消失后,这些子弹就无法击中。如果我的子弹击中世界边缘错误。如果我在拍摄时接近世界边缘,我会报错。

1 个答案:

答案 0 :(得分:0)

将自己从世界上移开后,您不能调用getX()或getY()。如果子弹向左或向右离开,则此后仍在检查其垂直范围。有两种方法可以解决此问题。最简单的方法是使用else将两个if一起加入:

public void checkBoundaries() {
        if (getX() > getWorld().getWidth() - 10) 
            getWorld().removeObject(this);
        else if (getX() < 10) 
            getWorld().removeObject(this);
        else if (getY() > getWorld().getHeight() - 10)  // <--- Now an else here
            getWorld().removeObject(this);
        else if (getY() < 10) 
            getWorld().removeObject(this);
    }

这避免了从世界移除后调用getY()。