如果 Greenfoot 中的 Actor 在顶部,则移除该 Actor

Remove an Actor in Greenfoot if he´s on the top

我在 Java 中与 Greenfoot 建立自己的 Space Invaders,我有一艘 Spaceship 可以射击外星人,但子弹停在地图顶部并留在那里,所以我写了这个方法,如果它击中顶部但它不起作用,它应该移除子弹。有什么问题?

public void disappearIfOnTop() {
    Actor Bullet = getOneIntersectingObject(Actor.class);
    getY();

    if(getY() == 0) {
        World world;
        world = getWorld();
        world.removeObject(Bullet);
    }
}

编辑:如果它们击中了卡在顶部的另一颗子弹,它们就会被移除。

方法getOneIntersectingObject() returns一个null如果没有其他演员。

您可能需要检查一下以确保:

public void disappearIfOnTop() {
    if (getY() == 0) {
        Actor bullet = getOneIntersectingObject(Actor.class);
        if (bullet == null) {
            setLocation(getX(), 50); // move down if no other is around
        } else {
            setLocation(getX(), 100); // move further down if another is around
        }
    }
}

如果方法 getOneIntersectingObject() returns 引用了一个演员,您当前的方法是删除 that 一个,而不是 Y= 处的那个0。 (顺便说一句,不要使用以大写字母开头的变量名。按照惯例,这是为 类 保留的。)

您可以将方法简化为:

public void disappearIfOnTop() {
    if (getY() == 0) {
        getWorld().removeObject(this);
    }
}