我认为我已经将Box2d配置为对任何物体都具有某种最大速度,但是我不确定。我施加了类似于(100000000, 100000000)的冲动,并且 body 的移动速度与(100, 100)一样快-根本没有那么快。

我正在使用Box2d XNA C#端口。

我的游戏是自上而下的2d游戏。

以下是一些可能相关的代码:

private readonly Vector2 GRAVITY = new Vector2(0, 0);

    public void initializePhysics(ContactReporter contactReporter)
    {
        world = new World(GRAVITY, true);
        IContactListener contactListener = contactReporter;
        world.ContactListener = contactListener;
    }

    public void Update(GameTime gameTime)
        {
     // ...

            worldState.PhysicsWorld.Step((float)gameTime.ElapsedGameTime.TotalSeconds, 10, 10);

     //...
        }

这是一些应用脉冲的示例代码:
    private void ApplyImpulseFromInput()
    {
        Vector2 movementImpulse = new Vector2();

        if (inputReader.ControlActivation(ActionInputType.MOVE_LEFT) == 1f)
        {
            movementImpulse.X = -Constants.PLAYER_IMPULSE_CONSTANT;
        } else if (inputReader.ControlActivation(ActionInputType.MOVE_RIGHT) == 1f)
        {
            movementImpulse.X = Constants.PLAYER_IMPULSE_CONSTANT; ;
        }

        if (inputReader.ControlActivation(ActionInputType.MOVE_UP) == 1f)
        {
            movementImpulse.Y = -Constants.PLAYER_IMPULSE_CONSTANT; ;
        } else if (inputReader.ControlActivation(ActionInputType.MOVE_DOWN) == 1f)
        {
            movementImpulse.Y = Constants.PLAYER_IMPULSE_CONSTANT; ;
        }

        model.Body.ApplyImpulse(movementImpulse, model.Position);
    }

如果Constants.PLAYER_IMPULSE_CONSTANT在从1000f1000000000f的任何位置,则播放器最多可以将(-120, -120)移到(120, 120)。如果常量较小,如1f,则播放器将移动得更慢。

此代码用于为游戏世界中的所有事物建立物理机制:
        controller.Model.BodyDef = new BodyDef();
        controller.Model.BodyDef.type = controller.Model.Mobile ? BodyType.Dynamic : BodyType.Static;
        controller.Model.Body = worldState.PhysicsWorld.CreateBody(controller.Model.BodyDef);
        controller.Model.Body.SetLinearDamping(10.0f);

可能是线性阻尼吗?我将其从10.0f更改为0,没有任何效果。

更新:带有线性阻尼的怪异现象:我已经对使用上述Apply impulse方法移动的物体进行了以下观察:
Linear Damping       Max Speed
0f                   120
10f                  120
50f                  120
55f                  90
60f                  0
70f                  0
100f                 0
100000f              0

为什么50f60f之间的线性阻尼有一定的灵敏度范围?

最佳答案

我对2.1a版本有同样的问题
我发现更改b2Settings.as中的第128行可以提供帮助。
将静态公共(public)const b2_maxTranslation:Number = 2.0更改为更高的数字。
确保这不是正确的方法,但是现在还不真正知道如何正确地做。

关于c# - Box2d:最大可能的线速度?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2576697/

10-12 03:59