Foros - Stratos

Stratos => Flash/Flex => Mensaje iniciado por: Buffon en 21 de Noviembre de 2008, 08:37:17 AM

Título: Bucle vs eventos
Publicado por: Buffon en 21 de Noviembre de 2008, 08:37:17 AM
Buenos días,

Estoy peleandome ahora con flex3 + as3 y tengo una seria duda.

Del código tradicional en C/C++:

while(true)
{
time1 = getTime()
gamelogic()
colisions()
movement()
...
do {
time2  = getTime() - time1
}while(time2 > XXXFPS )
}

he pasado a hacerlo por eventos con un Timer

gametimer:Timer = new Timer(20) <---- cada 20 ms se ejecutará un evento TIMER
gametimer.addEventListener(TimerEvent.TIMER,onTickTimer)
gametimer.start()

y en definitiva la función onTickTimer es el nuevo while(true) y como defines cada cuanto quieres lanzarla ya tienes los FPS estudiados, pero me veo que en el arkanoid que he hecho la pelota parece "vibrar", no se mueve con suavidad sino que a veces parece volver a un punto anterior y hace como un efecto "estela".

He mirado el tutorial de tirso de utilización de flex3 + as3 y su código es identico al mio, lo he probado y también tiene el mismo problema.

Es normal que esto ocurra cuando se utilizan eventos para generar los frames ? Es mejor casi seguir incluyendo el bucle de toda la vida y calcularse uno los FPS que desea ? Como se soluciona sino el efecto "estela".
Título: Re: Bucle vs eventos
Publicado por: Capiflash en 21 de Noviembre de 2008, 10:49:39 AM
La verdad es que es algo con lo que todavía no me he topado con Flex, de hecho, mi interes con el Flex es para crear "RIA's", asi que de momento no he metido mano a animar nada por la pantalla. Pero si alguien postea una solución es algo a tener en cuenta para cuando me surja una situación similar.
Título: Re: Bucle vs eventos
Publicado por: Buffon en 22 de Noviembre de 2008, 03:18:14 PM
nadie ? :(
Título: Re: Bucle vs eventos
Publicado por: Juanchocosa en 24 de Noviembre de 2008, 05:00:17 PM
Hola,

yo uso tambien timers para el bucle principal de juegos Flash, y no me he topado con este problema que comentas al mover objetos. Puedes pastear el código del movimiento en concreto? Igual ahí se puede ver donde está el problema.
Título: Re: Bucle vs eventos
Publicado por: Buffon en 25 de Noviembre de 2008, 08:16:23 AM
Pues el código es identico en el bucle al de Tirso:

http://developers.ululand.com/recipes/arkanoid-sauper-sencillo-en-as-3-0-compilable-con-mxmlc-compilador-flex

he compilado su código y le ocurre lo mismo.
Título: Re: Bucle vs eventos
Publicado por: TiRSO en 25 de Noviembre de 2008, 08:50:13 AM
Hola. Lo primero que quería decirte es que no pongas el código del Arkanoid ese como el "modelo a seguir" en cuanto a programación en Flash. Ese código es lo primero que escribí en mi vida en AS y la verdad es que es bastante chapucero, aunque una forma sencillísima de programar un arkanoid.

Sobre lo de los frames y tal... Ten en cuenta que se deben pasar los fps por defecto al compilador de flex (mxmlc). Esto se hace con la opción "-default-frame-rate". Por ejemplo, para compilar con un frame rate de 60, sería algo así:

Código (dos) [Seleccionar]
mxmlc -default-frame-rate 60 juego.as

Lo he probado con el arkanoid y al subirle los frames va mucho más fluido (el Timer del código está puesto pensando en unos 100fps ¬¬). Aún así sigue quedando esa estela rara, pero es que la bola va bastante rápido y es pequeña... He usado este mismo código en otros juegos y no se notaba nada raro.
Aún así, he visto bastante código de otros juegos y sí que hay gente que se hace todo esto a mano. Con clases enteras dedicadas a controlar los fps y demás.

Título: Re: Bucle vs eventos
Publicado por: Buffon en 25 de Noviembre de 2008, 09:00:11 AM
Gracias por la respuesta Tirso :D

seguiré probando y haciendo mis chapucillas, ahora me molaría saber como han hecho los efectos 3D con AS3, pero tiempo al tiempo.