BOX2D加速度/速度(单位:XNA)

BOX2D加速度/速度(单位:XNA),xna,box2d,Xna,Box2d,我遇到了一个问题,我尝试了所有可能的组合。我试图让我的球基本上以尽可能快的速度飞离屏幕。唯一的问题是,无论我设置了什么值,它都会以相同的速率移动。我试过了 ballBody.SetLinearVelocity(新向量2(1000000f,0)) ballBody.SetLinearVelocity(新矢量2(10f,0)) 中间的每一个数字,球仍然以相同的速度移动。我到底做错了什么。车身的代码也在下面。我只想让球跑得很快,就像弹球机一样 var bodyDef = new Bod

我遇到了一个问题,我尝试了所有可能的组合。我试图让我的球基本上以尽可能快的速度飞离屏幕。唯一的问题是,无论我设置了什么值,它都会以相同的速率移动。我试过了 ballBody.SetLinearVelocity(新向量2(1000000f,0))

ballBody.SetLinearVelocity(新矢量2(10f,0))

中间的每一个数字,球仍然以相同的速度移动。我到底做错了什么。车身的代码也在下面。我只想让球跑得很快,就像弹球机一样

        var bodyDef = new BodyDef();
        bodyDef.position = new Vector2(400, 200);

        bodyDef.type = BodyType.Dynamic;
        bodyDef.fixedRotation = true;


        ballBody = world.CreateBody(bodyDef);

        var circleShape = new CircleShape();
        circleShape._radius = 12.5f;

        var fixtureDef = new FixtureDef();
        fixtureDef.restitution = 1.4f;
        fixtureDef.shape = circleShape;
        fixtureDef.friction = 0;


        ballBody.CreateFixture(fixtureDef);

由于数值稳定性,Box2D中存在最大线速度。然而,它被设置得足够高,你不应该在正常使用时击中它

您应该注意,文档中也提到过,Box2D在长度介于0.1和10.0之间时效果最好。根据作者的说法,这是以米为单位来想象的,这使得它适合于模拟从棒球到桶再到公共汽车的物体。除此之外,它对数值不准确性变得更加敏感

尝试缩小坐标系,使模拟对象(可能是一个球)的平均大小为1.0个单位。这将有助于Box2D以最佳方式模拟您的系统

鉴于这一操作范围,速度超过10或100单位/秒可能会导致问题,特别是如果你将其应用于接收巨大动量的动态物体。如果这些高动量物体与其他物体碰撞,动量就会扩散,你的整个系统可能会飞走/变得不稳定

出于这个原因,一旦球应该飞走,最好将它变成一个运动体。运动物体根据速度移动,但不碰撞,也不受力的作用。我不确定,但有可能运动学体的速度更高,因为它们没有动量数据

编辑:
此外,通常不应使用高于1.0f的恢复系数。这样做会使身体在碰撞过程中获得动能。这在现实世界中并非不可能,但需要一些能源。想象一下,一种附着在身体上的化合物在撞击时爆炸,导致更多能量被泵入系统

由于数值稳定性,Box2D中存在最大线速度。然而,它被设置得足够高,你不应该在正常使用时击中它

您应该注意,文档中也提到过,Box2D在长度介于0.1和10.0之间时效果最好。根据作者的说法,这是以米为单位来想象的,这使得它适合于模拟从棒球到桶再到公共汽车的物体。除此之外,它对数值不准确性变得更加敏感

尝试缩小坐标系,使模拟对象(可能是一个球)的平均大小为1.0个单位。这将有助于Box2D以最佳方式模拟您的系统

鉴于这一操作范围,速度超过10或100单位/秒可能会导致问题,特别是如果你将其应用于接收巨大动量的动态物体。如果这些高动量物体与其他物体碰撞,动量就会扩散,你的整个系统可能会飞走/变得不稳定

出于这个原因,一旦球应该飞走,最好将它变成一个运动体。运动物体根据速度移动,但不碰撞,也不受力的作用。我不确定,但有可能运动学体的速度更高,因为它们没有动量数据

编辑:
此外,通常不应使用高于1.0f的恢复系数。这样做会使身体在碰撞过程中获得动能。这在现实世界中并非不可能,但需要一些能源。想象一下,一种附着在身体上的化合物在撞击时爆炸,导致更多能量被泵入系统

这篇相关文章有用吗?这篇相关文章有用吗?