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_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
、効果はありませんでした。
更新:線形ダンピングの奇妙さ: 上記の適用インパルス法で動かされた体について、これらの観察を行いました:
Linear Damping Max Speed
0f 120
10f 120
50f 120
55f 90
60f 0
70f 0
100f 0
100000f 0
50f
と の間に線形減衰の感度範囲があるのはなぜ60f
ですか?