Saya mencoba tiga cara berbeda untuk menggunakan ElapsedGameTimedan TotalGameTime, karena saya ingin kecocokan yang tepat, jadi semuanya diperbarui / digambar sesuai.
Ketika saya bereksperimen, saya belajar bahwa pembaruan pertama, ElapsedGameTimedan TotalGameTimekeduanya 0.
Pembaruan kedua, ElapsedGameTimeadalah 0,0166667, yang benar (60 pembaruan per detik). Tetapi TotalGameTime0, saya tidak mengerti mengapa.
Jadi, jika saya mulai menambahkan dari pembaruan ketiga ( time += gameTime.ElapsedTime), ElapsedGameTimesama dengan TotalGameTime, jika tidak akan selalu ada perbedaan 0,0166667.
Bisakah seseorang menjelaskan hal itu kepada saya?
DIPERBARUI: kode
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, atau GameTime.TotalGameTime.TotalMilliseconds?