[英]Java: How do I check to see if a particular instance of an object is in the world?
注意:我正在使用Greenfoot IDE
因此,我受命创建一个Balloon项目,其中Balloon类的对象浮动到屏幕顶部。 其他细节由我决定。
所以我做到了,使我的Balloons通过一个pop方法弹出,该方法由另外两个方法调用。 另外两个方法是topPop()(如果if(getY()<= 0),则调用pop())和hitCopter(),如果Balloon与我的直升机播放器对象相交,则调用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);
}
}
您可以在if-else块中检查两个事件,例如...
public void method() {
Helicopter copter = (Helicopter) getOneIntersectingObject(Helicopter.class);
if (copter != null) {
copter.hit(dmg);
pop();
} else {
topPop();
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.