当前位置: 首页 > 知识库问答 >
问题:

2D 侧滚筒上的碰撞检测:未正确碰撞

洪胤
2023-03-14

我下面的碰撞方法有问题。问题是当游戏中有两个敌人时。它与循环中的一个敌人相交,然后返回true进行碰撞。但是如果在这个数组列表中有第二个敌人,它将不会与第二个物体碰撞,因此导致它返回false,玩家继续行走。有什么办法可以让他在接触任何敌人时停下来,而不是因为他没有接触到所有的敌人而继续下去吗?谢谢,这是密码。

public void checkCollision(){
    ArrayList<Enemy> enemy = c.getEnemyList();
    for ( int i = 0; i < enemy.size(); i++){
        Enemy e = enemy.get(i);

        if (!getBounds().intersects(e.getBounds())){
            walk();
            return;
        }
        if (getBounds().intersects(e.getBounds())){
            if (e.getHP() <= 0){
                c.removeEnemy(e);
                walk();
                return;
            }
            fight();
            if (count == 25 || count == 65){
                int dd = DCalc.calcDmg(atk, atkMAX);
                e.dmg(dd);
            }

    }
    }

}

共有1个答案

慕容成文
2023-03-14

这只是“提前退货”问题的另一个例子。当您需要检查格式(if ANY,x,否则y)或(if ALL,x,否则y)并以格式(if FIRST,x,否则y)重新表述时,就会出现这个问题。

要解决这个问题,您需要重新设计算法,如下所示:

bool collided = false
For each enemy:
    Are we colliding with this enemy?
    If we are, do collision detection and set `collided` to true
end for

If `collided` is false, NOW we can run the code that should only run if we collided with nothing
 类似资料:
  • 我正在尝试做一个平台游戏,其中没有斜坡。我正在尝试将碰撞检测降下来,但是我在pygame中找不到一种方法来获得哪一边与另一个Sprite发生了碰撞。有没有人能给我一个好的方法来做到这一点,那不是太庞大,但也能很好地工作在我的情况? 下面是我的玩家类: 我已经将它添加到我的player类中,每次播放器更新时我都运行它,并且它工作...差一点。 在平台顶部的碰撞起作用,在侧面的碰撞几乎总是起作用,除非

  • 我正在开发一款平台游戏,我想做一些基本的平台碰撞,遗憾的是我还是做不到。玩家的移动是这样计算的: 所有变量都是具有< code>x和< code>y值的向量。这和预期的一样,问题是有冲突。我的规则是: 当降落在平台上时停止坠落。 从平台运行时开始下降。 在跳跃过程中击中平台时停止向上移动。 撞墙时停止向一侧移动,但能够向相反方向移动。 检查底部是否与平台碰撞非常简单,但棘手的部分是检测哪一侧与平台

  • 碰撞检测 现在你知道了如何制造种类繁多的图形对象,但是你能用他们做什么?一个有趣的事情是利用它制作一个简单的 碰撞检测系统 。你可以用一个叫做:hitTestRectangle 的自定义的函数来检测两个矩形精灵是否接触。 hitTestRectangle(spriteOne, spriteTwo) 如果它们重叠, hitTestRectangle 会返回 true。你可以用 hitTestRect

  • 本节暂未进行完全的重写,错误可能会很多。如果可能的话,请对照原文进行阅读。如果有报告本节的错误,将会延迟至重写之后进行处理。 当试图判断两个物体之间是否有碰撞发生时,我们通常不使用物体本身的数据,因为这些物体常常会很复杂,这将导致碰撞检测变得很复杂。正因这一点,使用重叠在物体上的更简单的外形(通常有较简单明确的数学定义)来进行碰撞检测成为常用的方法。我们基于这些简单的外形来检测碰撞,这样代码会变得

  • 我计划一个独立游戏项目已经有一段时间了。我会为你总结一下,这样我就可以直接回答这个问题。 它是通过Visual Studio完全使用最新版本的XNA完成的。希望将其放在360和PC上,但目前我只是在真正寻找面向PC的解决方案。 这是一个2D侧向滚动射击游戏(想想大都会风格,甚至是Terraria)。它最终将包括一个游戏中的地图编辑器,地图是基于图块的(16x16)。会有向上和向下滚动。我希望在开发

  • 问题内容: 有人可以帮我了解JS中冲突检测的工作原理吗?我不能使用jQuery或gameQuery-已经使用了原型- 因此,我正在寻找非常简单的东西。不要求完整的解决方案,只需为我指明正确的方向。 假设有: 现在球正在移动(任何方向)。“ Someobject”(0-X)已经预先定义,其中有20-60个随机放置,如下所示: 我可以创建一个位置为“ someobject(X)”的数组,并在“球”移动