减少Java游戏中碰撞方法的数量
我正在用java做一个简单的游戏,我有很多方法来测试两个对象是否发生碰撞。物品包括人、敌人、箭、墙、硬币等。我有一系列方法可以计算可能发生的每种类型的碰撞,它们如下所示:减少Java游戏中碰撞方法的数量,java,awt,collision,graphics2d,java-2d,Java,Awt,Collision,Graphics2d,Java 2d,我正在用java做一个简单的游戏,我有很多方法来测试两个对象是否发生碰撞。物品包括人、敌人、箭、墙、硬币等。我有一系列方法可以计算可能发生的每种类型的碰撞,它们如下所示: public boolean collide(Arrow a, Enemy b) { Rectangle a1 = a.getBounds(); Rectangle b1 = b.getBounds(); if(a1.intersects(b1)) return
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()。您可以执行以下操作:
public boolean collide(HasBounds a, HasBounds b){...
使用界面:
public interface HasBounds{
Rectangle getBounds();
}
您应该在对象上定义
箭头
,敌人
等。。。(您可能已经有了适合的对象层次结构)。您可以执行以下操作:
public boolean collide(HasBounds a, HasBounds b){...
使用界面:
public interface HasBounds{
Rectangle getBounds();
}
您应该在对象上定义
箭头
,敌人
等。。。(您可能已经有了适合的对象层次结构)。只需使用方法: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());
}
}
玩家、敌人、箭、墙将是GameObject类的子类只需使用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());
}
}
玩家、敌人、箭、墙将是GameObject类的子类您对此有何看法
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;
}
希望你觉得有用
谢谢
@狮子座。你觉得这个怎么样
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.使用这些类的公共接口,而不是
对象
。该接口必须包含一个方法Rectangle getBounds()这些类必须实现它。此外,您还可以将最后两行替换为返回a1。相交(b1)代码>有关使用形状
实例进行碰撞检测的示例,请参见。请使用这些类的公共接口,而不是对象
。该接口必须包含一个方法Rectangle getBounds()这些类必须实现它。此外,您还可以将最后两行替换为返回a1。相交(b1)代码>请参见使用Shape
实例进行冲突检测的示例。更简单的是:公共布尔碰撞(HasBounds a,HasBounds b){
更简单的是:公共布尔碰撞(HasBounds a,HasBounds b){
这如何减少碰撞()
方法的数量?现在不需要重载碰撞()方法具有不同的碰撞修改。相反,只有一个方法宽度参数:(GameObject collid1,GameObject collid2)应该是答案的一部分。构造函数和getShape()
方法与OPs问题无关。这如何减少collide()的数量
方法?现在您不需要使用不同的Collid修改重载collide()方法。相反,答案中应该有一个方法宽度参数:(GameObject collid1,GameObject collid2)。构造函数和getShape()
方法与OPs问题无关。。