Java 爪哇及;二维对象交互

Java 爪哇及;二维对象交互,java,eclipse,collision-detection,collision,slick2d,Java,Eclipse,Collision Detection,Collision,Slick2d,在我用slick2d创建的学习Java的游戏中,我有多个关卡,每个关卡都有一个足球运动员,以及我希望足球运动员能够与之互动的多个其他单位。我还希望其他单位相互作用(例如多个球s相互碰撞)(注意,其中一些单位有时与另一个单位属于同一类别,例如多个防守方s)。但是,我不确定如何检测这些交互并适当地更新单元。例如,我有我的足球运动员: public class Footballer extends Unit { public Footballer(float x, float y){

在我用slick2d创建的学习Java的游戏中,我有多个关卡,每个关卡都有一个
足球运动员
,以及我希望足球运动员能够与之互动的多个其他单位。我还希望其他单位相互作用(例如多个
s相互碰撞)(注意,其中一些单位有时与另一个单位属于同一类别,例如多个
防守方
s)。但是,我不确定如何检测这些交互并适当地更新单元。例如,我有我的
足球运动员

public class Footballer extends Unit {
    public Footballer(float x, float y){
        super("res/ballerpicture", x, y)
        }
    }
在这个类中,我有一个更新函数,它覆盖了Unit类中的更新函数(允许我根据输入移动一名
足球运动员
——除了碰撞检测之外,这项工作没有任何问题)

例如,我可以在地图上加载5个球:

public class Ball extends Unit {
    public Ball(float x, float y){
        super("res/ballpicture", x, y)
        }
    }
例如,我想知道如何在与
足球运动员
发生碰撞时更新任何一个球,每次碰撞时将它们从球员身上移开一块瓷砖

我的
Unit
类包括一个
move
方法,该方法基于整数方向(左=1,右=2等)移动单元


如果我对这个问题过于饱和或者没有包含足够的信息,我深表歉意-我对java相对来说是新手。

您需要的是。 所有能够相互作用的物体都可以有一个hitbox,这是最简单的一种表示物体主体的几何形状。例如,我们可以假设你的球有一个半径为8px的圆形击球盒,你的球员有一个宽度为32px,高度为32px的矩形击球盒

当两个对象都在移动时,您必须检查hitbox的边界是否相互相交,如果相交:如果不相交,请采取措施,继续移动

在Slick2D中,所有形状都有一个称为intersects(Shape s)的方法,如果两个形状的边界相交,则返回true。因此,基本上您只需为对象实现hitbox(确保在对象移动时更新hitbox),然后检查相交。有很多不同的方法来实现碰撞检测,互联网提供了很多关于该主题的资源。我还建议看一下Slick2D的功能。很难为您编写解决方案,因为我不知道您的代码,但我相信您会找到答案,并且Slick2D为您的问题提供了一个简单的预实现解决方案,使用Intersection方法

它可能看起来有点像以下内容:

编辑,对于多个球:

//in your update method
for(Ball ball : allBalls){
if(footballer.getHitbox().intersects(ball.getHitbox()){
//get direction of footballer
ball.move(...)
}
}

非常感谢。这是球员的更新方法还是球的更新方法?在某些关卡中可能会有多个球-我如何解决这个问题?这取决于你的游戏架构。我会把它装进播放器里。您可以将所有球存储在一个列表中,检查交叉点的每个元素(请注意,这是计算密集型的)。但这基本上取决于你的球是如何储存在你的游戏世界。你也可以将此实现到球的更新方法中,并调用游戏中每个球的每个更新方法。我编辑了我的帖子,向你展示了我在列表上迭代的意思。非常感谢!我想这给了我解决问题所需的一切。太好了,如果你还需要帮助,请告诉我。