我想我已經配置Box2d對任何物體都有某種最大速度,但我不確定。我應用了像(100000000, 100000000)
這樣的衝動,身體的移動速度與(100, 100)
一樣快 - 這並不是那麼快。Box2d:最大可能的線速度?
我正在使用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
是1000f
到1000000000f
任何地方,玩家可以移動最多(-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
,沒有任何效果。
UPDATE:怪誕與線性阻尼:我已就被移動與主體這些觀察的應用上面脈衝法:
Linear Damping Max Speed
0f 120
10f 120
50f 120
55f 90
60f 0
70f 0
100f 0
100000f 0
爲什麼有線性50f
之間阻尼的範圍內的靈敏度的和60f
?
應用衝動的代碼可能很有用。 – 2010-04-05 02:59:23
對不起。添加它。 – 2010-04-05 03:09:37
+1以抵制投票人的投票。這是一個合理的問題。 – avpx 2010-04-05 03:24:47