Tôi đã thử ba cách sử dụng khác nhau ElapsedGameTime
và TotalGameTime
vì tôi muốn một kết hợp chính xác, vì vậy mọi thứ đều được cập nhật / rút ra tương ứng.
Khi tôi đang thử nghiệm, tôi đã biết rằng bản cập nhật đầu tiên ElapsedGameTime
và TotalGameTime
đều là 0.
Cập nhật thứ hai, ElapsedGameTime
là 0,0166667, đúng (60 cập nhật mỗi giây). Nhưng TotalGameTime
là 0, tôi không hiểu tại sao.
Vì vậy, nếu tôi bắt đầu thêm từ bản cập nhật thứ ba ( time += gameTime.ElapsedTime
), ElapsedGameTime
bằng TotalGameTime
, nếu không sẽ luôn có chênh lệch 0,0166667.
Ai đó có thể giải thích điều đó với tôi?
CẬP NHẬT: mã
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using System.Diagnostics;
namespace TestTime
{
class TimeTest2
{
TimeSpan totalTimeElapsed;
TimeSpan frequency = TimeSpan.FromSeconds(5.5f);
int times = 0;
int timesCheckpoint = 1;
public void load()
{
}
public void initialize()
{
totalTimeElapsed = TimeSpan.Zero;
}
public void update(GameTime gameTime)
{
times++;
String debug = "";
TimeSpan zero = TimeSpan.Zero;
if( times > 2 )
{
totalTimeElapsed += gameTime.ElapsedGameTime;
}
if( totalTimeElapsed != gameTime.TotalGameTime )
{
debug += " Diff time:"+times+" ["+totalTimeElapsed.ToString() + " != " + gameTime.TotalGameTime.ToString() + "]";
}
TimeSpan checkpoint = TimeSpan.FromSeconds(5.5f*timesCheckpoint);
if( gameTime.TotalGameTime >= checkpoint )
{
debug += "5.5f MARK ";
timesCheckpoint++;
}
if( !debug.Equals("") )
{
addDebug(debug + " -" + gameTime.TotalGameTime.ToString());
addDebug("");
}
}
public void draw()
{
}
public void addDebug(string str)
{
Debug.WriteLine(str);
}
}
}
GameTime.TotalGameTime.Milliseconds
, hay GameTime.TotalGameTime.TotalMilliseconds
?