Comunidad de diseño web y desarrollo en internet online

juegos ¿cómo controlar la velocidad para diferentes equipos?

Citar            
MensajeEscrito el 10 Mar 2010 01:06 pm
Saludos,
Al programar juegos (con movimientos y apariciones en pantalla de bastantes objetos móviles (MovieClips animados)) el control de los objetos depende mucho de la velocidad de los equipos donde se visualice, ¿cómo se puede solucionar esto?, y otra cuestión ¿Para mover objetos variando su posición x ó y, es mejor usar TIMER (del tipo new Timer (100) o usar ENTER_FRAME modificando las propiedades de la velocidad de la película, se podría llegar a igualar velocidades para todo tipo de equipos y los tiempos de acción de los eventos podrían también ser iguales?.
Gracias por vuestras respuestas...

Por araña

35 de clabLevel



 

msie7
Citar            
MensajeEscrito el 10 Mar 2010 05:50 pm
No hay forma de que cambies el poder de procesamiento del ordenador, así puedes optimizar tu código para que corra lo mas rápido posible, pero por debajo de un umbral no tienes nada que hacer. Con respecto al Timer o EnterFrame, yo prefiero lo segundo, pero uses uno u otro lo ideal es que tengas un solo "pulso" de animación para todo el juego, al que elementos y personajes se subscriben para moverse

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 11 Mar 2010 07:48 am
Araña, lo que buscas tú es "animaciones basadas en tiempo" (Time-Based Animation)
Vale, un ejemplo que vale más que mil palabras. Tenemos un MC llamado "mc"

Código ActionScript :

//una variable "velocidad"
var vel=2
//en una variable guardamos el tiempo que lleva ejecutándose la película
var lastTime:int = getTimer();
addEventListener(Event.ENTER_FRAME, animateMc);
function animateMc(event:Event) {
  var timeDiff:int = getTimer()-lastTime;  //<--hallamos el tiempo transcurrido como diferencia del tiempo actual menos
                                 //el tiempo guardado anteriormente
  lastTime += timeDiff;  //<--incrementamos el valor de la variable
  mc.x += timeDiff*vel;  //<--la velocidad la multiplicamos por el tiempo transcurrido
}

Vamos, lo que hacemos es incrementar la "x" o la "y" mediante la "velocidad" y la diferencia de tiempo transcurrido entre un ENTER_FRAME y otro (para ello usamos la función getTimer)
Con eso verás que, aunque aumentes los fps de tu película tu MC se moverá a la misma velocidad. Lógicamente a mayor número de fps (60 es un buen número) el movimiento será más "fluido". Igualmente, con un ordenador más potente el movimiento se verá más fluido (recordemos que los fps que elegimos en la película no son realmente fps reales, sino una aproximación a la que no se llega nunca)
Ah!, como dice Jorge usa un ENTER_FRAME

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 11 Mar 2010 09:40 am
Gracias Solisarg por tu respuesta.
Eliseo2 te agradezco el código lo probaré gracias.

Por araña

35 de clabLevel



 

msie7

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.