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

libgdx 像素碰撞在非常简单的 2D 游戏

程项禹
2023-03-14

我对libgdx和游戏开发非常陌生。我的任务是给我一个非常简单的2D游戏,它已经实现了矩形碰撞检测。

游戏只是由一个可以由玩家控制的正方形组成,该正方形位于墙壁内,墙壁内有其他分散的正方形。我现在需要在玩家方块和散落方块/墙壁之间实现像素完美碰撞。

我最初尝试使用Pixmap,并试图检查当前坐标的像素对于播放器矩形以及与之冲突的任何矩形是否透明,但在正确实现代码时遇到了问题。

我知道我必须在某个坐标下检查两个对象的像素颜色,看看它们是否都不透明,以便发生碰撞,但我遇到了麻烦。我花了很长时间在网上研究和查找,所以关于如何执行此操作的任何帮助或建议都将不胜感激!

public boolean entityCollision(Entity e1, Direction direction, float newX, float newY) {
    boolean collision = false;

    for(int i = 0; i < entities.size(); i++) {
        Entity e2 = entities.get(i);

        if (e1 != e2) {

            if (newX < e2.x + e2.width && e2.x < newX + e1.width &&
                newY < e2.y + e2.height && e2.y < newY + e1.height) {
                collision = true;

                int colorOne = player.getPixel((int)newX,(int)newY);
                int colorTwo = enemy.getPixel((int)e2.x,(int)e2.y);

                if (colorOne != 0 && colorTwo != 0) {
                  collision = true;
                  e1.entityCollision(e2, newX, newY, direction);
                }
            }
        }
    }

    return collision;
}

共有2个答案

汪胤
2023-03-14

如果希望与精灵发生碰撞,可以获取精灵矩形并检查该矩形内的碰撞。

sprite.getboundingrectangle().contains(x, y) ; //returns a boolean
佟阳飙
2023-03-14

请看一下 libgdx 的矩形实现。它允许您执行如下操作:

Rectangle e1Rec = new Rectangle(e1.x, e1.y, e1.width, e1.height);
Rectangle e2Rec = new Rectangle(e2.x, e2.y, e2.width, e2.height);

if (e1Rec.contains(e2Rec)) {
   // Collision!
}
 类似资料:
  • 我已经和LWJGL一起开发这个游戏几个星期了。自从我增加了跳跃的能力后,向上的碰撞给我带来了很多问题。 这个游戏是一个基于2D瓷砖的侧翻游戏。总的来说,除了玩家跳跃时,碰撞几乎是完美的。起初我想“哦,也许我只需要改变跳跃机制”,但后来我意识到只有当玩家通过某个x坐标时才会发生这种情况。 现在,对于实际问题本身:如果玩家在传递某个x坐标时跳转,他们将通过平铺,并测试顶部碰撞返回false。 这是整个

  • 我正在做一个2d平板游戏。到目前为止,我已经做了一些事情。我正在使用libgdx的矩形进行基本的碰撞检测,所以考虑到我现在只有草块,我用Java制作了一个单块世界(文件读取器还没有准备好),问题是我的检测只在第一次工作,换句话说,如果我产生碰撞到一个块,它会检测到碰撞并这样做。虽然如果我在没有碰撞的情况下,让我的球员在方块顶部出现,球员将永远摔倒。 这是代码=

  • 我正在尝试制作我的第一个Pacman游戏,但我遇到了一堵我自己似乎无法打破的墙:( 这是关于如何在我的游戏中检测碰撞,所以步行者不能穿过障碍物/墙壁。我已经使它不能去屏幕外与此代码: ,但如果我在屏幕中间的电路板上有一个矩形,我不知道如何编程,这样它就会在墙前停止。 我需要阻止我的pacman移动到竞技场内的墙上,如你所见(左上方的矩形) 我的Board类代码: 希望有人能告诉我该怎么做...似乎

  • 我可以阻止吃豆人通过墙的一种方式,但他可以通过墙时去在另一个方向,我使用的代码是: } 我需要他在任何方向上都不要穿过墙!提前谢谢

  • 我的问题主要与它背后的理论有关。我为一个项目制作了一个2D游戏,通过使用Rectangle类中的.overlapps方法检测碰撞,碰撞处理得很好。首先,被认为是连续或离散碰撞技术。当我读到这个理论时,我说它是离散的,但我在网上的文章中读到离散的主要缺点是它在实际发生碰撞后检测到碰撞。所以,我的问题是:它实际上是离散的吗?如果是这样的话,我看不出它有什么缺点吗?谢谢

  • 我一直在尝试在Libgdx中找到/创建矩形的碰撞检测,但似乎什么都做不到。我有一个叫bucket的矩形,宽度和高度为64,还有一个叫wall的矩形,宽度和高度为64。我试着让玩家不穿过矩形,可以在粘墙的同时继续移动,而不需要通过相位或随机传送。我的方法在有1个块的情况下有效,但当有多个块的时候,它就会中断,不起作用。 我知道这种方法很难看但这只是实验 如果有人能给我指出正确的方向或分享一些对我有帮