Java:如何检查某个对象的特定实例是否在世界中?

问题描述:

注意:我正在使用Greenfoot IDEJava:如何检查某个对象的特定实例是否在世界中?

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

所以我做了这个,让我的气球弹出一个pop方法,这个方法被另外两个方法调用。其他两种方法是topPop(),其中pop()在if(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); 
    } 


} 

你可以在if-else块检查这两个事件,类似...

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

谢谢你,至少我删除崩溃。我仍然对看到我的方法是否可行感兴趣,但我很高兴它不会崩溃。 – 2014-09-24 21:19:10