Java Libgdx中的碰撞检测管理

Java Libgdx中的碰撞检测管理,java,libgdx,collision-detection,Java,Libgdx,Collision Detection,看完后: 我考虑了如何在libgdx中管理它,因为它支持其他碰撞检测(使用Intersector)和其他可以在游戏中使用的类。 我有我的对象的逻辑和它们的属性(例如,具有移动速度和健康度的僵尸),以及纹理、屏幕位置等的外观(例如,Zombie2d,它是Actor的一个子类)。Zombie2d也有一个对Zombie的引用,以具有Zombie的所有属性。问题是:是否每个参与者都应该有一个对存储所有其他对象的级别的引用并自己检测碰撞,还是我应该有一个以该级别作为引用的管理器? 我应该在Actor.a

看完后:

我考虑了如何在libgdx中管理它,因为它支持其他碰撞检测(使用Intersector)和其他可以在游戏中使用的类。
我有我的对象的逻辑和它们的属性(例如,具有移动速度和健康度的僵尸),以及纹理、屏幕位置等的外观(例如,Zombie2d,它是Actor的一个子类)。Zombie2d也有一个对Zombie的引用,以具有Zombie的所有属性。问题是:是否每个参与者都应该有一个对存储所有其他对象的级别的引用并自己检测碰撞,还是我应该有一个以该级别作为引用的管理器?
我应该在Actor.act(delta)方法内部还是在Actor.act()和Actor.draw()之间执行冲突检测

是否每个参与者都应该有一个对存储所有其他对象的级别的引用,并自己检测碰撞,还是应该有一个以该级别为引用的管理器

这取决于您的游戏,例如,像这样的游戏:

通过非常简单的碰撞(平台/松鼠/硬币等仅与Bob碰撞,但它们不会相互碰撞),可以在类中轻松处理。像这样:

//for example, Bob colliding with squirrels
private void checkSquirrelCollisions(){
    int len = squirrels.size();
    for (int i = 0; i < len; i++){
        Squirrel squirrel = squirrels.get(i);
        if (squirrel.bounds.overlaps(bob.bounds)){
            bob.hitSquirrel();
            listener.hit();
        }
    }
}
//例如,鲍勃与松鼠相撞
私有的void检查(){
int len=squirres.size();
对于(int i=0;i
但是,如果一个更复杂的游戏中有相互碰撞的敌人/子弹/等/墙/玩家/等,那么如果每个人都处理自己的碰撞,则会找到更干净的代码

我应该在Actor.act(delta)方法内部还是在Actor.act()和Actor.draw()之间执行冲突检测

因为碰撞在实体行为中起着重要作用(例如反弹、停止移动等)。最好将它放在
Actor.act(delta)
方法中

是否每个参与者都应该有一个对存储所有其他对象的级别的引用,并自己检测碰撞,还是应该有一个以该级别为引用的管理器

这取决于您的游戏,例如,像这样的游戏:

通过非常简单的碰撞(平台/松鼠/硬币等仅与Bob碰撞,但它们不会相互碰撞),可以在类中轻松处理。像这样:

//for example, Bob colliding with squirrels
private void checkSquirrelCollisions(){
    int len = squirrels.size();
    for (int i = 0; i < len; i++){
        Squirrel squirrel = squirrels.get(i);
        if (squirrel.bounds.overlaps(bob.bounds)){
            bob.hitSquirrel();
            listener.hit();
        }
    }
}
//例如,鲍勃与松鼠相撞
私有的void检查(){
int len=squirres.size();
对于(int i=0;i
但是,如果一个更复杂的游戏中有相互碰撞的敌人/子弹/等/墙/玩家/等,那么如果每个人都处理自己的碰撞,则会找到更干净的代码

我应该在Actor.act(delta)方法内部还是在Actor.act()和Actor.draw()之间执行冲突检测


因为碰撞在实体行为中起着重要作用(例如反弹、停止移动等)。最好将它放在
Actor.act(delta)
方法中。

在我的游戏中,我有敌人/子弹等,所以第二种情况是我需要的。问:当玩家与敌人发生碰撞时,玩家和敌人都检测到了这种碰撞,那么他们应该只调用自己的反应还是调用另一方的反应并“停止”这种碰撞?让他们也调用另一方的反应,因为当另一方检查其碰撞时,第一方可能已经移动了(例如反弹).+1作为你的答案。直到现在,我有一个负责碰撞检测的碰撞管理者,但我认为这是一个更好的解决方案。在我的游戏中,我有敌人/子弹等,所以第二种情况是我需要的。问题:当玩家与敌人碰撞时,玩家和敌人都会检测到碰撞,所以他们应该只调用自己的反应吗或者另一方的反应和“停止”碰撞?让他们也调用另一方的反应,因为当另一方检查其碰撞时,第一方可能已经移动(例如反弹).+1作为你的答案。直到现在,我有一个负责碰撞检测的CollisionManager,但我认为这是一个更好的解决方案