Box2d:最大可能的线速度?

我想我已经将Box2d配置为对任何身体都有某种最大速度,但我不确定。 我应用像(100000000, 100000000)这样的冲动,身体的移动速度与(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_CONSTANT1000f1000000000f ,则玩家最多可以移动(-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 ,没有任何效果。

更新:线性阻尼的奇怪之处:我已经使用上面的应用脉冲方法对身体进行了这些观察:

 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行可以提供帮助。 将static public const b2_maxTranslation:Number = 2.0更改为更高的数字。 确定这不是正确的方法,但现在还不知道如何正确地做到这一点。

这不是解决这个问题的方法。 您应该在box2D世界中创建它们时缩小对象。 然后你可以扩展box2D给你的信息回到你的世界的大小。

比方说,我的世界中的一个盒子长120像素。 如果我将对象缩小30倍以便可以通过box2d正确模拟,那么box2D世界中我的框的长度将是4“像素”长(120/30或对象/比例的大小)。 现在,让我们说box2D计算我的盒子在box2d世界中移动了3个“像素”。 然后,我可以获取该信息并将其缩放到我的世界大小,这意味着该框只移动了90像素(3 * 30)。 我希望这听起来不会太混乱。 我通常觉得很难解释自己。

Interesting Posts