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

Libgdx矩形墙碰撞

常茂
2023-03-14

我一直在尝试在Libgdx中找到/创建矩形的碰撞检测,但似乎什么都做不到。我有一个叫bucket的矩形,宽度和高度为64,还有一个叫wall的矩形,宽度和高度为64。我试着让玩家不穿过矩形,可以在粘墙的同时继续移动,而不需要通过相位或随机传送。我的方法在有1个块的情况下有效,但当有多个块的时候,它就会中断,不起作用。

我知道这种方法很难看但这只是实验

private void checkCollisions(Rectangle bucket, Wall wall){
    if(bucket.overlaps(wall.getRectangle())){
        if(bucket.x > wall.getRectangle().x - 64 && bucket.x < wall.getRectangle().x - 55){
            //collision with right side
            bucket.x = wall.getRectangle().x - 64;
        }
        if(bucket.x < wall.getRectangle().x + 64 && bucket.x > wall.getRectangle().x + 55){
            //collision with left side 
            bucket.x = wall.getRectangle().y + 64;
        }                           
        if(bucket.y < wall.getRectangle().y + 64 && bucket.y > wall.getRectangle().y + 55){
            //collision with top side 
            bucket.y = wall.getRectangle().y + 64;
        }                             
        if(bucket.y > wall.getRectangle().y - 64 && bucket.y < wall.getRectangle().y - 55){
            //collision with bottom side
            bucket.y = wall.getRectangle().y - 64;
        }
    }
}

如果有人能给我指出正确的方向或分享一些对我有帮助的代码,我会非常感激。

共有1个答案

闾丘京
2023-03-14

LibGDX中查看冲突检测时,您必须首先注意默认LibGDX坐标系统的两个重要方面。

  • 当您绘制图像时,其(x, y)坐标是图像的左下角
  • (0,0)是屏幕左下方

使用这些信息,我们可以将您的冲突逻辑修复为以下内容:

private void checkCollisions(Rectangle bucket, Wall wall){
    if(bucket.overlaps(wall.getRectangle())){
        if(bucket.x + 64 > wall.getRectangle().x && bucket.x < wall.getRectangle().x){
            //collision with right side of bucket
        }
        if(bucket.x < wall.getRectangle().x + 64 && bucket.x > wall.getRectangle().x){
            //collision with left side of bucket
        }                           
        if(bucket.y + 64 > wall.getRectangle().y && bucket.y < wall.getRectangle().y){
            //collision with top side of bucket
        }                             
        if(bucket.y < wall.getRectangle().y + 64 && bucket.y > wall.getRectangle().y){
            //collision with bottom side of bucket
        }
    }
}

该方法将确定铲斗的哪一侧检测到与默认LibGDX坐标系的碰撞。

 类似资料:
  • 我正在为我的播放器和bullet类创建一些围绕精灵的矩形,以使用LibGDX的Intersector类中的重叠方法检测碰撞。 我有一个问题: 当我实例化Player和Bullet时,我使用sprite.getBoundingRectangle()在精灵周围创建一个边界框,它返回一个Rectangle对象。我在主类的其他地方更新这些的移动。 当我更新子弹/玩家精灵的移动时,我是否也需要更新子弹/玩家

  • 我花了数小时寻找解决方案:我正在用libgdx开发一个自上而下的小游戏(可能这与我使用的引擎有关)。现在我必须在我的角色(圆形)和墙(矩形)之间实现碰撞检测。如果可以滑动,我希望角色在碰撞时沿着墙滑动。让我解释一下: 如果我向上移动45度,我可能会撞到墙的下面、左边或角落。 如果我与左边相撞,我想停止x运动,只向上移动。如果我离开墙壁,那么我想继续向上移动。与下侧相同(停止y运动) 如果我与角落相

  • 我使用libgdx为一个项目制作了一个2D游戏,我的碰撞检测技术基于。在矩形中重叠方法,效果良好。我想了解其背后的实现,如果我要将其与intersects方法并行,我知道它是如何工作的。但这是唯一的吗?我读到,在离散碰撞检测方法中,不仅需要计算实体是否发生碰撞,还需要计算它们发生碰撞的“程度”(碰撞深度),并使用轴对齐的边界盒算法将实体推回。首先,我对矩形重叠技术是否与libgdx中的AAAB相同

  • 我已经在这里呆了2-3周了,我仍然无法进行适当的碰撞检测。我用矩形创建了一个迷宫。我希望我的对象(在矩形中)每当我的对象与任何墙壁碰撞时停止,并能够移动到任何地方(或滑下墙壁)。我的墙壁(矩形)具有负坐标,如下所示: 我目前正在使用SO中发现的重叠方法。以下是我的CollisionManager类中的方法: 我有一个功能可以保存对象所做的所有位置移动。因此,当发生碰撞时,对象会恢复到最后一次移动之

  • 问题内容: 我遇到一个问题,即一个矩形与另一个矩形发生碰撞。所以我的问题是,如何获取相交方法以检查碰撞?还是在这种情况下还有其他方法可以处理碰撞? 我正在创建一个回合制战斗游戏(类似于《最终幻想》或《龙骑传奇》),其中玩家的角色在屏幕的右侧,而敌人在屏幕的左侧。玩家和敌人轮流进攻。因此,当玩家攻击时,子画面动画会从右到左在屏幕上移动,直到停在敌人面前,进行攻击并返回到其起始坐标。玩家和敌人周围都有

  • 我有一个问题,碰撞检测一个圆和一个矩形。我曾尝试用勾股定理来解决这个问题。但所有查询都不起作用。矩形与圆的矩形包围盒发生碰撞。