Tôi nghĩ rằng tôi đã cấu hình Box2d để có một số loại tốc độ tối đa cho bất kỳ cơ thể, nhưng tôi không chắc chắn. Tôi áp dụng một xung như (100000000, 100000000)
, và cơ thể di chuyển nhanh như (100, 100)
- mà không phải là nhanh chóng cả.Box2d: Tốc độ tuyến tính tối đa có thể?
Tôi đang sử dụng cổng Box2d XNA C#.
Trò chơi của tôi là từ trên xuống 2ngày.
Dưới đây là một số mã có thể có liên quan:
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);
//...
}
Dưới đây là một số mã ví dụ áp dụng các xung:
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);
}
Nếu Constants.PLAYER_IMPULSE_CONSTANT
là bất cứ nơi nào từ 1000f
để 1000000000f
, người chơi có thể di chuyển tối đa (-120, -120)
đến (120, 120)
. Nếu hằng số ít hơn, như 1f
, người chơi sẽ di chuyển chậm hơn.
Mã này được sử dụng để thiết lập vật lý cho tất cả mọi thứ trong thế giới game:
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);
thể nó có thể là tuyến tính giảm xóc? Tôi đã thay đổi nó từ 10.0f
thành 0
, không có hiệu lực.
UPDATE: weirdness với giảm xóc tuyến tính: Tôi đã thực hiện những quan sát trên cơ thể đó là di chuyển với áp dụng phương pháp xung trên:
Linear Damping Max Speed
0f 120
10f 120
50f 120
55f 90
60f 0
70f 0
100f 0
100000f 0
Tại sao lại có một loạt các tính nhạy cảm trong tuyến tính giảm xóc giữa 50f
và 60f
?
Mã áp dụng xung có thể hữu ích. –
Xin lỗi. Đã thêm nó. –
+1 để chống lại bất kỳ ai đã bỏ phiếu này. Đây là một câu hỏi hợp pháp. – avpx