Java: как проверить, есть ли в мире конкретный экземпляр объекта?

Примечание. Я использую среду разработки Greenfoot.

Поэтому мне поручили создать проект Balloon, в котором объекты класса Balloon всплывают в верхней части экрана. Любые другие детали зависят от моего решения.

Поэтому я сделал так, чтобы мои воздушные шары всплывали через метод pop, который вызывается двумя другими методами. Два других метода — это topPop(), где pop() вызывается, если (getY() ‹= 0), и hitCopter(), где pop() вызывается, если воздушный шар пересекается с моим объектом игрока-вертолета.

Проблема здесь в том, что в моем методе Act() программа падает после того, как она сталкивается с тем методом, который я вызвал первым, hitCopter() или topPop(), и говорит, что другой был виноват в сбое, потому что он пытается пройти через оба метода. методы, но не можете сделать другой, потому что вы не можете проверить его пересечение или его getY(), когда он больше не существует в мире.

Поэтому я решил, что если бы я мог проверить, находится ли этот экземпляр объекта в мире, прежде чем выполнять либо topPop(), либо hitCopter(), это решило бы мою проблему. Проблема в том, что я не знаю, как это сделать, и я не могу найти ответ в Интернете о том, как это сделать явно.

Я попытался сделать это с помощью списка, и мой код здесь отражает это, но я на самом деле не знаю, как проверить список, поэтому мои проверки операторов if отражают мое невежество.

Вот мой код в настоящее время:

    import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)
import java.util.List;  
/**
 * Write a description of class Balloon here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class Balloon extends Actor
{
    //variable declaration
    private int yAxis;
    private int num;
    private int size;
    private int health;
    private int dmg;
    private int rndmSize;
    private int setSize;
    private Balloon thisBalloon;
    public Balloon()
    {
        rndmSize = Greenfoot.getRandomNumber(6)+1;
        rndmSize();
        setSize(setSize);
        num=0;
        yAxis=0;
        thisBalloon = this;
    }
        public void rndmSize()
    {
        if (rndmSize==1)
        {
            setSize = 5;
        }
        else if(rndmSize==2)
        {
            setSize = 10;
        }
        else if(rndmSize==3)
        {
            setSize = 15;
        }
        else if(rndmSize==4)
        {
            setSize = 20;
        }
        else if(rndmSize==5)
        {
            setSize = 25;
        }
        else
        {
            setSize = 30;
        }
    }
    public void act() 
    {
        fly();
        if (getWorld().getObjects(Balloon.class) != Balloon.this)
        {
            topPop();
        }
        List<Balloon> balloon = this;
        for(Actor actor : balloon)
        {
            if (actor instanceof balloon)
            return true;
        }
        if (getWorld().getObjects(Balloon.class) != Balloon.this)
        {
            hitCopter();
        }
        setSize(health);
    }    
    public void fly()
    {
        num++;
        yAxis=getWorld().getHeight()-num;
        setLocation(getX(),yAxis);
        turn(1);
    }
    public void setSize(int size2)
    {
        health = size2;
        this.size = size2;
        dmg = size2/2;
        GreenfootImage image=getImage();
        image.scale(size2,size2);
    }
    public void topPop()
    {
        if(getY()<=5)
        {
            pop();
        }
    }
    public void hit(int damage)
    {
        health-=damage;
        if(health <=0)
        {
            getWorld().removeObject(this);
            return;
        }

    }
    public void hitCopter()
    {
        Helicopter copter = (Helicopter) getOneIntersectingObject(Helicopter.class);
        if (copter != null)
        {
            copter.hit(dmg);
            pop();
        }
    }
    public int returnSize()
    {
        return size;
    }
    public void pop()
    {
        //popping animation

        //remove the balloon
        getWorld().removeObject(this);
    }


}

person Ben Boudreau    schedule 24.09.2014    source источник


Ответы (1)


Вы можете проверить оба события в блоке if-else, например...

public void method() {
    Helicopter copter = (Helicopter) getOneIntersectingObject(Helicopter.class);
    if (copter != null) {
        copter.hit(dmg);
        pop();
    } else {
        topPop();
    }
}
person Schroed    schedule 24.09.2014
comment
Спасибо, что хотя бы убрали мой краш. Мне все еще интересно посмотреть, был ли возможен мой подход, но я рад, что он не рухнул. - person Ben Boudreau; 25.09.2014