Estaba probando tres formas diferentes de usar ElapsedGameTimey TotalGameTime, porque quiero una coincidencia exacta, por lo que todo se actualiza / dibuja en consecuencia.
Mientras estaba experimentando, aprendí que la primera actualización, ElapsedGameTimey TotalGameTimeambos son 0.
La segunda actualización ElapsedGameTimees 0.0166667, que es correcta (60 actualizaciones por segundo). Pero TotalGameTimees 0, no entiendo por qué.
Entonces, si empiezo a agregar desde la tercera actualización ( time += gameTime.ElapsedTime), ElapsedGameTimees igual a TotalGameTime, de lo contrario siempre habrá una diferencia de 0.0166667.
¿Puede alguien explicarme eso?
ACTUALIZADO: código
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, oGameTime.TotalGameTime.TotalMilliseconds?Respuestas:
Parece un pequeño error, o un comportamiento precisamente correcto, desde el punto en que desea verlo. Verá, el
Updatemétodo se llama dos veces antes de la primera llamadaDraw, la primera vez que se encuentra fuera del bucle principal del juego.TotalGameTimese actualiza en el momento entre el finalUpdatey el comienzo delDraw, dentro del ciclo del juego .ElapsedGameTimePor otro lado, se actualiza después del inicio del bucle principal y antesUpdate. Ambos se inicializan0antes de llamar al primeroUpdate.Si lees la descripción de un
ElapsedGameTimees dice:En el primer cuadro dentro del bucle del juego es una segunda
Updatellamada. EntoncesElapsedGameTimemuestra el tiempo transcurrido desde la primeraUpdatellamada.OTOH,
TotalGameTimedice:Esto es más vago, pero parece que el juego no puede considerarse iniciado, hasta que ingresó en un bucle principal y comienza a dibujarse. Por lo tanto, se
TotalGameTimeactualiza por primera vez después de la segunda llamada aUpdate. De ahí la diferencia que observas.fuente