Duda sobre cómo generar retardo entre acciones en XNA

Hola! Soy nuevo en C# y estoy creando un juego tipo Space Invaders en XNA Game Studio 4.0, y me gustaría que mi nave disparase 2 veces en vez de una antes de que los disparos toquen el "techo" del escenario. He conseguido que ambos sean disparados pero a la vez, (por lo que salen superpuestos) por lo que me gustaría asignar una especie de "delay" o retardo de tiempo entre uno y otro para que se puedan diferenciarse entre sí y el usuario pueda aprovecharlo.

Básicamente mi duda es que clase de métodos existen en XNA para poder "contar tiempo" para así generar ese retardo entre disparos...

No se si servirá de algo pero por si acaso aquí está parte del código que uso para generarlos, si se necesita alguna parte más del código solo avisadme XD
if (Keyboard.GetState().IsKeyDown(Keys.J))
                if (disp == null)
                    disp = new Disparo(new Vector2(pos.X + (textura.Width / 2) - 7, pos.Y - 7), texturaDisparo);
                if (disp2 == null)
                    disp2 = new Disparo(new Vector2(pos.X + (textura.Width / 2) - 7, pos.Y - 7), texturaDisparo);



EDIT: también me gustaría saber como hacer para que el juego solo ejecute una accion 1 vez por cada pulsación de teclado, es decir, quiero que dispare una vez por cada vez que apriete y levante la tecla "J" , pues no quiero que si se tiene pulsada ésta tecla esté todo el rato disparando xD

Gracias, un saludo!
Usando "System.Threading.Thread.Sleep()" entre los dos if lo que hace es una pausa entre el primer y el segundo if en este ejemplo de 1000 ms = 1segundo.

if (Keyboard.GetState().IsKeyDown(Keys.J))
if (disp == null)
disp = new Disparo(new Vector2(pos.X + (textura.Width / 2) - 7, pos.Y - 7), texturaDisparo);
System.Threading.Thread.Sleep(1000);
if (disp2 == null)
disp2 = new Disparo(new Vector2(pos.X + (textura.Width / 2) - 7, pos.Y - 7), texturaDisparo);

Por lo que entiendo con esto te bastaria
Gracias por contestar, pero por lo que acabo de probar si introduzco ese System.Threading.Thread.Sleep() entre los dos If el juego se congela durante un segundo (al menos la imagen, de fondo el juego continua aunque no lo vea en movimiento) si pulso la tecla de disparo, y al segundo vuelve a moverse, no se si es que su función es esa, congelar todo durante 1 seg o hago algo mal :S

A mi me gustaría solamente que el segundo disparo esperase digamos 1 segundo tras lanzar el primero pero sin que eso interrumpa la partida :(
Calcúlalo en base a el numero de frames, que cuando dispares una variable se ponga a cero, le vas sumando 1 por cada frame y cuando llegue a 10 por ejemplo dispare el segundo, pero el "IF" de chequeo de si llega a 10 debería estar en el bucle principal fuera de la pulsación del botón.
Lo suyo sería crear un hilo a parte encargado de añadir el disparo después
Prueba esto entre los dos If

int dwStartTime = System.Environment.TickCount;
                while (true)
                {
                    if (System.Environment.TickCount - dwStartTime > 1000) break;
                }


hara un bucle tonto que durara 1 segundo y en principio de esta forma no se te deberia congelar el juego entero...
Por fin he conseguido adaptarlo por el método de los frames, ahora dispara como yo quiero XD Muchas gracias por la ayuda! [oki]
Me alegro que te haya dado resultado.
8 respuestas