Tôi đã thử ba cách sử dụng khác nhau ElapsedGameTimevà TotalGameTimevì 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 ElapsedGameTimevà TotalGameTimeđều là 0.
Cập nhật thứ hai, ElapsedGameTimelà 0,0166667, đúng (60 cập nhật mỗi giây). Nhưng TotalGameTimelà 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), ElapsedGameTimebằ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?