我在java中制作一个简单的游戏,我有很多方法可以测试两个对象是否发生碰撞。物体包括人,敌人,箭,墙,硬币等。我有一堆方法可以计算可能发生的每种类型的碰撞,它们看起来像这样:
public boolean collide(Arrow a, Enemy b)
{
Rectangle a1 = a.getBounds();
Rectangle b1 = b.getBounds();
if(a1.intersects(b1)) return true;
else return false;
}
是否有创建通用方法?我尝试使用对象a和对象b作为参数但编译器使用它无法找到对象的getBounds()。
答案 0 :(得分:3)
您可以执行以下操作:
public boolean collide(HasBounds a, HasBounds b){...
使用界面:
public interface HasBounds{
Rectangle getBounds();
}
您应该在对象Arrow
,Enemy
等上定义...(您可能已经有适合的对象层次结构)。
答案 1 :(得分:1)
public boolean collide(Rectangle a1, Rectangle b1)
{
return a1.intersects(b1);
}
或者可能是创建界面
public interface CanCollide {
Rectangle getBounds();
}
并在方法中使用它......
public boolean collide(CanCollide a, CanCollide b)
{
Rectangle a1 = a.getBounds();
Rectangle b1 = b.getBounds();
if(a1.intersects(b1)) return true;
else return false;
}
希望你觉得它很有用。
谢谢!
@leo。
答案 2 :(得分:-1)
使用方法:Rectangle2D getShape()创建抽象类GameObject。此方法可能如下所示:
abstract class GameObject {
private Image image;
GameObject(String path) {
try {
image = ImageIO.read(new File(path));
} catch (IOException ex) {}
}
Rectangle2D getShape() {
return new Rectangle2D.Float(0, 0, (int)image.getWidth(), (int)image.getHeight());
}
}
Player,Enemy,Arrow,Wall将是GameObject类的子类