Tôi đang cố gắng mô phỏng trọng lực trong trò chơi xna 2d đầu tiên của mình. Tôi có sauXna thêm lực hấp dẫn vào một sprite 2d
//Used for Jumping
double elapsedAirTime = 0.0;
double maxAirTime = 8.35;
//End Jumping
Vì vậy, tôi đang cố gắng để di chuyển sprite lên bởi một số tiền nhất định trong khi elapsedAirTime < maxAirTime Tuy nhiên, có một số vấn đề mà mã của tôi dường như chỉ để di chuyển sprite lên một lần và không nhiều lần trong phân đoạn thời gian này. đây là mã trong lớp "player.cs" của tôi hoặc phương thức cập nhật của lớp.
if (newState.IsKeyDown(Keys.Space))
{
if(oldState.IsKeyUp(Keys.Space))
{
//if we are standing or jumping then change the velocity
if (playerState == PlayerStates.Standing)
{
playerState = PlayerStates.Jumping;
this.position.Y -= (float)(30.0 + ((1.2)*elapsedAirTime)*elapsedAirTime);
}
}
}
//if we are jumping give it some time
if (playerState == PlayerStates.Jumping)
{
if ((elapsedAirTime < maxAirTime) && position.Y < 3)
{
this.position.Y -= (float)(30.0 + ((1.2) * elapsedAirTime)*elapsedAirTime);
elapsedAirTime += gameTime.ElapsedGameTime.TotalSeconds;
}
//otherwise time to fall
else
{
playerState = PlayerStates.Falling;
}
}
//add gravity to falling objects
if (playerState == PlayerStates.Falling || playerState == PlayerStates.Standing)
{
//if we are above the ground
if (this.position.Y < windowBot - 110)
{
//chnage state to falling
playerState = PlayerStates.Falling;
this.position.Y += 3.0f + ((float)(gameTime.ElapsedGameTime.TotalSeconds));
}
else
{
playerState = PlayerStates.Standing;
elapsedAirTime = 0.0f;
}
}
Bất kỳ trợ giúp nào được đánh giá cao, xin cảm ơn!
Tại sao tính thời gianScalar và lưu trữ thời gian trò chơi cũ?Nếu chức năng cập nhật này được gọi là mỗi vòng lặp trò chơi (vì nó phải là), gt.ElapsedGameTime đã thực hiện tất cả việc nâng hạng nặng cho bạn. –
Lý do sử dụng timeScalar là a) nếu bạn muốn thay đổi tốc độ khung hình mặc định hoặc b) nếu máy tính của bạn chậm đến mức không thể theo kịp với 60 UPS/FPS XNA mặc định. Trong cả hai trường hợp, nếu bạn rơi sau tốc độ cập nhật mục tiêu, trò chơi của bạn sẽ trông giống như đang bị chậm trễ mà không có mã timeScalar. – Darkhydro