【问题标题】:Java: How do I check to see if a particular instance of an object is in the world?Java:如何检查对象的特定实例是否存在于世界中?
【发布时间】:2014-09-24 20:43:11
【问题描述】:

注意:我使用的是 Greenfoot IDE

所以我的任务是创建一个 Balloon 项目,其中 Balloon 类的对象浮动到屏幕顶部。任何其他细节由我决定。

所以我这样做是为了让我的气球通过一个 pop 方法弹出,该方法由其他两个方法调用。另外两个方法是 topPop(),如果 (getY()

这里的问题是,在我的 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);
    }


}

【问题讨论】:

    标签: java balloon greenfoot


    【解决方案1】:

    您可以在 if-else 块中检查这两个事件,例如...

    public void method() {
        Helicopter copter = (Helicopter) getOneIntersectingObject(Helicopter.class);
        if (copter != null) {
            copter.hit(dmg);
            pop();
        } else {
            topPop();
        }
    }
    

    【讨论】:

    • 谢谢你至少消除了我的崩溃。我仍然有兴趣看看我的方法是否可行,但我很高兴它不会崩溃。
    猜你喜欢
    • 2015-08-03
    • 2015-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-07
    • 2020-10-31
    • 2015-07-24
    相关资源
    最近更新 更多