domingo, 24 de mayo de 2009

Truco: Mover un sprite, bien.

Uno de los pequeños truquillos que aprendí en la charla sobre XNA a la que asistí fue como mover correctamente un sprite por pantalla.

El error que yo cometía, y mucha más gente por lo que se puede ver en los muchos ejemplos que se encuentran por Internet, es que al mover el sprite me limitaba a sumarle un número de píxeles en cada ciclo del método Update  y me quedaba tan pancho, eso funciona perfectamente, pero cuando ejecutemos nuestro juego en un PC más potente, esté se moverá mucho más rápido. Evitar esto es muy sencillo, simplemente hay que controlar el tiempo que ha pasado desde el último ciclo de Update:

float velocidad = 600f;
this.Posicion.X += (float)gameTime.ElapsedGameTime.TotalSeconds * velocidad;

En el ejemplo creamos una variable para controlar la velocidad y la multiplicamos por el tiempo transcurrido, de esta forma nos aseguramos de que el juego corra siempre a la misma velocidad.

2 comentarios:

  1. yo lo que veo más práctico es poner un "if" que englobe todo el update (o la parte que te interese claro), del tipo:

    if(elapsedtime>=myTimeFramerate)...

    sinó tienes que complicar demasiado la lógica

    ResponderEliminar
  2. Si, es otra opción muy valida. Las dos hacen mas o menos lo mismo.

    ResponderEliminar