有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

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

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

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

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

    编辑,对于多个球:

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