当前位置: 首页 > 面试题库 >

box2d中不正确的碰撞

夏经武
2023-03-14
问题内容

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

这是两个主体的代码

//矩形体的方法

public Body createRectangleBodyPart(float x, float y, float width,
        float height, short groupIndex) {
    PolygonShape shape = new PolygonShape();
    shape.setAsBox(width*WORLD_TO_BOX, height*WORLD_TO_BOX);
    MassData massData = new MassData();
    massData.mass = 15;
    BodyDef bodyDef = new BodyDef();
    bodyDef.type = BodyType.KinematicBody;
    bodyDef.position.y = y*WORLD_TO_BOX;
    bodyDef.position.x = x*WORLD_TO_BOX;
     body = world.createBody(bodyDef);
    body.setMassData(massData);
    FixtureDef fixtureDef = new FixtureDef();
    fixtureDef.shape = shape;
    fixtureDef.density = 1;
    fixtureDef.friction = 100f;
    fixtureDef.restitution = 0.5f;
    fixtureDef.filter.groupIndex=groupIndex;
    body.createFixture(fixtureDef);
    shape.dispose();
    return body;
}

//球体的方法

    public Body createRoundBodyPart2(float x, float y, float radius,
        short groupIndex, float density, int mass) {

    CircleShape shape = new CircleShape();
    shape.setPosition(new Vector2(0, 0));
    shape.setRadius(radius*WORLD_TO_BOX ); // *18
    BodyDef bodyDef = new BodyDef();
    bodyDef.type = BodyType.DynamicBody;
    bodyDef.position.y = y*WORLD_TO_BOX;
    bodyDef.position.x = x*WORLD_TO_BOX;
    MassData massData = new MassData();
    massData.mass = 8;
    Body body = world.createBody(bodyDef);
    body.setMassData(massData);
    FixtureDef fixtureDef = new FixtureDef();
    fixtureDef.shape = shape;
    fixtureDef.density = 0.5f;
    fixtureDef.restitution=0.007f;
    fixtureDef.filter.groupIndex = groupIndex;
    body.createFixture(fixtureDef);
    shape.dispose();
    return body;
}

问题答案:

尝试isBullet=true在球体上使用属性



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

  • 因此,我进行了一个测试,看看碰撞是如何在SFML中操作的。我制作了以下代码片段: 正如代码所提示的,马里奥在接触地板物体时会改变位置,并且会瞬移到地板上方。 注意,“绿框”是我前面提到的地板对象。还有,忽略图片1中的“左”字,我指的是“右”。 当然,这种行为是有意的(即不是bug),但它是不想要的。 所以我的问题是:我怎样才能消除这种“副作用”呢?我的意思是,我怎样才能修改我的代码,这样马里奥就不

  • 我遵循简单的碰撞检测方法,使用边界框方法,并检查它们是否相交。 代码如下: 编辑:我试着通过获取x,y位置并增加精灵的宽度和高度来创建我自己的边界框。 现在,有趣的事情发生了,碰撞检测工作,但它的工作有点不正确。在实际相交发生之前,碰撞检测被检测到。 我通过打开CC_SPRITE_DEBUG_DRAW验证了这一点,它确实发生在碰撞发生前的几分钟,即射弹的边界框在敌人的边界框之外。 这似乎是大多数人

  • 我正在使用libgdx和box2d开发我的第一个游戏。我正在使用调试渲染器测试我的对象。我创造了一些类似汽车的物体。每辆车都有一个主体,它是一个由6个点组成的大多边形(约1米长,0.7米高),有两个轮子通过旋转关节连接。 主车有一门大炮和一把机枪,也通过旋转接头连接。 我面临的问题是,汽车的大部分没有按预期进行碰撞。当两辆车相互碰撞时,它们是重叠的,如下所示: 一些注意事项: 轮子和大炮(较小的形

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

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