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

box2d碰撞组对于来自自己玩家的子弹是不够的

慕飞章
2023-03-14

所以我知道碰撞组和过滤器等。但是我需要一种方法来检查子弹是否来自同一个玩家。如果这只是在客户端上,那很容易,因为我可以为玩家自己的子弹创建一个碰撞组,为敌人的子弹创建一个冲突组,但是由于服务器是检测碰撞的服务器,因此没有“客户端”玩家,每个玩家和子弹都被视为相同,除了附加到子弹的用户数据有一个uid。

所以基本上我想要这样的东西-

  if(collisionA.m_userData.type == "projectile"){
            if(collisionA.m_userData.uid === collisionB.m_userData.uid){
               dontApplyCollisionOrPhysics()
            }
        }

共有1个答案

易昌翰
2023-03-14

您可以通过添加属性所有者来改进项目符号对象

function bullet(owner){
    //Your Bullet properties
    this.owner = owner;
}

您只在将要使用对象项目符号时创建它,因此在那一刻添加所有者。在本例中,是uid。

 类似资料:
  • 问题内容: 我正在开发一种游戏,其中用户必须击打高速球。为了击球,我使用旋转关节将一个矩形物体与演员连接在一起,并使它的马达以指定速度(马达速度)旋转。现在一切都非常完美,但是当球的速度很高时,它绕过了矩形车身。使用碰撞列表器,我发现发生了碰撞,但是碰撞后球没有被反射。因为只有在球高速运转时才会发生这种情况,所以要碰撞的物体的密度是bcoz。还是它的旋转关节马达?我在这里想念什么吗? 这是两个主体

  • 所以我尝试在cocos2d-x中测试与box2d的碰撞。在我的游戏循环中,我移动精灵,而不是使用box2d物理。我确实在box2d中设置了一个实体,这样我就可以正确地设置矩形,但是当它与另一个对象碰撞时,它是重叠的。我想让它停在发生碰撞的地方。我知道它为什么这样做(这是因为它被告知移动8点,碰撞发生在4点),但我不确定如何让它在碰撞的确切位置停止。如果我这样做: 它是有效的,但你可以看到它在移动8

  • 我正在做一个平台游戏,玩家有一把剑。我希望玩家只能在他下面有地面的时候攻击(所以他不能在空中攻击)。所以我实现了这段代码: 但是.. 每次返回零。虽然如果我将添加到测试玩家是否在地面的部分,它仍然存在!(虽然接地仍然等于零) 以下是完整的代码: 有人能帮忙吗?:)

  • 所以我用Box2D在游戏中进行冲突检测。我有一个包含地形信息的地图:现在它只是一个有道路或草地的字符[][]。现在,在每个关卡开始时,我想创建矩形来描述不同的地形,但是我希望这些矩形得到优化,显然这需要相当多的算法。 我的第一个方法是在关卡开始时为地图上的每一个区块创建一个单独的地形。FPS降低到了5。 我的第二个想法是当玩家沿着地图移动时,简单地为地形创建不同的矩形,删除看不见的矩形。虽然它仍然

  • 我正在开发一个物理游戏,遇到了一个奇怪的bug:有时,在发射大量子弹后,碰撞检测开始失败。 从下面的GIF可以看出,碰撞只在半个平台上起作用,很奇怪。此外,启用了Box2D调试渲染器,还可以看到平台是一个单体。 下面是我如何让这个bug发生的,因为它只有在发射了很多子弹后才会发生(开始时一切都很好): 注意: - 子弹的场设置为 - 我将玩家的场设置为 ,没有区别 - 玩家是 1 米乘 1 米 -

  • 我是Bullet新手,如果我的问题对你来说听起来微不足道,我提前道歉。 我需要从.stl文件加载一组凹三角形网格,并执行碰撞检测。用户可以移动对象。在用户手册中,我读到:“凹形三角形网格:对于静态世界环境,表示静态三角形网格的一种非常有效的方法是使用btBvhTriangleMeshShape。” 因此,我的问题是:Bullet可以检测使用BvhTriangleMeshShape建模的凹形网格对象