eclipsejava与Slick2d对象交互
在我用slick2d创建的一个学习Java的游戏中,我有多个关卡,每个关卡都有一个Footballer
和多个我希望球员能够与之互动的其他单位。我还希望其他单元彼此交互(例如,多个Ball
相互碰撞)(注意,其中一些单元有时与另一个单元属于同一类,例如多个Defender
)。但是,我不确定如何检测这些交互并适当地更新单元。例如,我有我的Footballer
:
public class Footballer extends Unit {
public Footballer(float x, float y){
super("res/ballerpicture", x, y)
}
}
在这个类中,我有一个更新函数,它覆盖了Unit类中的更新函数(允许我根据输入移动一个Footballer
,除了冲突检测之外,这没有任何问题)
例如,我可以在地图上加载5个球:
public class Ball extends Unit {
public Ball(float x, float y){
super("res/ballpicture", x, y)
}
}
例如,我想知道如何在与Footballer
碰撞时更新任何一个球,每次碰撞时将它们从玩家处移动一个磁贴
我的Unit
类包含一个move
方法,该方法基于整数方向(左=1,右=2等)移动单元
如果我对这个问题过于饱和或者没有包含足够的信息,我深表歉意-我对java相对来说是新手
# 1 楼答案
你要找的是collision detection。 所有能够相互作用的物体都可以有一个hitbox,这是最简单的一种表示物体主体的几何形状。例如,我们可以假设你的球有一个半径为8px的圆形击球盒,你的球员有一个宽度为32px,高度为32px的矩形击球盒
当两个对象都在移动时,您必须检查hitbox的边界是否相互相交,如果相交:如果不相交,请采取措施,继续移动
在Slick2D中,所有形状都有一个称为intersects(Shape s)的方法,如果两个形状的边界相交,则返回true。因此,基本上您只需为对象实现hitbox(确保在对象移动时更新hitbox),然后检查相交。有很多不同的方法来实现碰撞检测,互联网提供了很多关于该主题的资源。我还建议看一下Slick2D的Shape documentation。很难为您编写解决方案,因为我不知道您的代码,但我相信您会找到答案,并且Slick2D为您的问题提供了一个简单的预实现解决方案,使用Intersection方法
它可能看起来有点像以下内容:
编辑,对于多个球: