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

Libgdx Box2D只控制一些特定对象的碰撞响应

曹旭东
2023-03-14

Box2d中,据我所知,对象有一个默认的碰撞响应,可以让它们停止移动或反弹回来(如果您设置了恢复)。
您还可以说,该对象是一个传感器,因此您可以实现自己的碰撞响应。
现在我想对某些类型的碰撞使用默认的碰撞响应,而我想完全控制与特定对象的碰撞。
例如:如果玩家与墙壁相撞,则应该停止运动或反弹,但当他与子弹相撞时,它应该松动Hp,子弹应该被移除。
所以我想有类似于接触过滤器,但与过滤器不匹配的对象应该以默认行为做出反应。

这样的事情可能吗<我该怎么做?

谢谢

共有2个答案

赵高韵
2023-03-14

这个基础是这样的:

http://pastebin.com/9vzZUbTT

所有设备的用户数据都应该有一个特定的名称。

这对我有用!

实体类包含主体和固定装置。

编辑:可能不是你想要的,但它是一些东西

编辑2:http://pastebin.com/Cw0R7hmq像这样的东西,可能有很多编译错误,但我希望你明白我想说的。

陶博涉
2023-03-14

使用< code>CollisionListener并检查该类型的装置/主体的用户数据。然后你可以想怎么处理就怎么处理。如果不希望玩家/子弹碰撞有响应,应该禁用< code>preSolve中的< code>Contact(通过< code > Contact . set enabled(false))并将子弹标记为要销毁。

在这种情况下,拥有强大的碰撞处理系统是必要的。我创建了一个要点,展示了我如何通过所谓的CollisionHandlers.来做到这一点,这些ShariseHandler负责每种类型的EntityA与EntityB碰撞。CollisionFilter 已经可以预筛选总共的碰撞,CollisionListener 将确定正确的 CollisionHandler 并将回调转发给这些冲突处理程序。它使用反射,可能不是很多身体和碰撞的最快方法,但到目前为止,我在这里没有遇到任何问题。

你可以在这里找到要点。

 类似资料:
  • 我有两个长方形,一个玩家,一张地图。玩家不能在地图中穿行。玩家和地图都有一个带有位置和纹理宽度和高度的矩形,也都有一个矢量位置。< code >矩形。Intersect()只输出一个布尔值,我不知道如何找出哪一侧发生了碰撞。我在这里找到了这个函数,它输出一个向量来表示矩形重叠的程度。 这个函数将基于边给出负数,但是我不知道如何有效地使用它们。我试过了: 但是,这会导致一些奇怪的错误,尤其是在尝试对

  • 我的新想法是使用9个点,围绕我的玩家对象,并检查这些点中的哪一个是在瓷砖的界限内。一个点在每个角落,每边和一个在中心。每种瓦片类型将使用一组不同的规则来处理冲突。 然而,每种瓦片类型都必须使用一组复杂的条件语句来进行冲突测试--可能过于复杂。有什么指导吗?

  • Cocos Creator 中内置了一个简单易用的碰撞检测系统,他会根据添加的碰撞组件进行碰撞检测。 当一个碰撞组件被启用时,这个碰撞组件会被自动添加到碰撞检测系统中,并搜索能够与他进行碰撞的其他已添加的碰撞组件来生成一个碰撞对。 需要注意的是,一个节点上的碰撞组件,无论如何都是不会相互进行碰撞检测的。 碰撞检测系统的使用 碰撞系统接口 获取碰撞检测系统 var manager = cc.dire

  • Chipmunk的cpArbiter结构封装了一对碰撞的形状和关于他们的所有碰撞数据。 为什么称之为仲裁者?简短来说,我一直用的是“仲裁”来形容碰撞解决的方式,然后早在2006年当我在看Box2D的求解器的时候看到了Box2D居然叫他们仲裁者。仲裁者就像是一个法官,有权力来解决两个人之间的纠纷。这是有趣的,使用了合适的名字并且输入比我以前用的CollisionPair要短。它最初只是被设定为一个私

  • 如果我研究一维上两个球的碰撞检测。假设第一个球在位置0,每帧速度5像素,第二个球在位置3,每帧速度-5像素,那么在下一帧中,第一个球将移动到位置5,第二个球将跳到位置-2。在这种情况下,它们之间没有重叠,因此碰撞检测将失败。我怎么处理这个案子?这里有一张图片来说明:

  • 如果我想每秒移动一个物体40像素,并且我有以下场景,我如何有效地检测到发生了碰撞? 假设两个对象都是 10 x 10 个正方形 2秒时移动物体的起点: 40, 100 移动物体在3秒时的终点: 80, 100 停滞物体在60,100 如果我只移动移动物体一次(从40到80之间没有任何移动),我怎么知道它们之间有一个物体? 这显然是我正在做的事情的简化版本,但我希望它易于理解。 我唯一能想到的是检查