Foros del Web » Creando para Internet » Flash y Actionscript »

Problema de programacion de juego con AS3

Estas en el tema de Problema de programacion de juego con AS3 en el foro de Flash y Actionscript en Foros del Web. Buenas, mi problema es el siguiente: Estoy desarrollando una aplicación (juego simple) con flash y cuando cargo el swf (despues de un largo rato de ...
  #1 (permalink)  
Antiguo 16/06/2011, 14:40
Avatar de Liurk  
Fecha de Ingreso: junio-2011
Ubicación: España
Mensajes: 5
Antigüedad: 12 años, 9 meses
Puntos: 0
Problema de programacion de juego con AS3

Buenas, mi problema es el siguiente: Estoy desarrollando una aplicación (juego simple) con flash y cuando cargo el swf (despues de un largo rato de espera) al dar click a la zona se me clava el programa y en la salida me salta el error #1502, de 15 segundos de espera. Luego carga el script como quiero. En el compilador no me da errores, pero en la salida si. El problema, dice, es en definir una funcion para mover un objeto en una direccion concreta que usa While: Les pongo un ejemplo del funcionamiento y del error:

(aclaro: pongo los nombres de instancia entre comillas en el post para no dar informacion de mas, en el codigo la sintaxis es perfecta, solo falla algo que hace que me salte dicho error )

Error:

Error: Error #1502: El tiempo de ejecución del script ha superado el tiempo de espera predeterminado de 15 segundos.
at Sint_fla::MainTimeline/go()

Funcionamiento:

"zona de la pantalla".addEventListener(MouseEvent.CLICK, go);
function go(evt:MouseEvent):void{
while ("objeto".x < "zona de la pantalla".x, "objeto".y > "zona de la pantalla".y){
"objeto".gotoAndStop(2);
}
}

(en la ultima linea escrita lo hago saltar al fotograma 2 para que el objeto quede orientado)
ademas dentro del objeto tengo cambios de x y de y dentro la linea de tiempo, para que la animacion y el desplazamiento se sincronice.

Gracias de antemano.
  #2 (permalink)  
Antiguo 16/06/2011, 15:19
Avatar de jahepi
Colaborador
 
Fecha de Ingreso: diciembre-2004
Ubicación: Querétaro
Mensajes: 1.124
Antigüedad: 19 años, 3 meses
Puntos: 43
Respuesta: Problema de programacion de juego con AS3

Hola Liurk !

Se te cuelga el juego por el while que tienes definido, lo que te aconsejo es utilizar la clase Timer, lo que hace es crear una especie de hilo que se estará ejecutando por intervalos de tiempo que tu indiques y lo terminas cuando la condición se cumpla.

Viendo bien las partes de tu código no entiendo bien para que usas la estructura while, si escuchas por el evento cuando le dan clic a la pantalla sólo es necesario comprobar con un if.

Un saludo y suerte !
__________________
Una contraseña es como la ropa interior. No deberías dejarlas afuera a la vista de otras personas, deberías cambiarla regularmente, y ni se te ocurra prestarla a extraños.

Última edición por jahepi; 16/06/2011 a las 15:26
  #3 (permalink)  
Antiguo 16/06/2011, 15:56
Avatar de Liurk  
Fecha de Ingreso: junio-2011
Ubicación: España
Mensajes: 5
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Problema de programacion de juego con AS3

Bueno, la verdad, soy nuevo en AS y aun no lo llevo muy bien, ademas de ser mi primer lenguaje de programacion. Pondre el ejemplo de lo que quiero hacer: Tengo un objeto (por ejemplo un circulo o cuadrado) y quiero que cuando se haga click a una zona del escenario (encima de otro objeto (por ejemplo una mesa) el objeto se oriente hacia la mesa y vaya hasta encima suyo. Como el programa esta recien empezado se trata de algo unidireccional, pero mi intencion es terminar haciendolo en 4 direcciones posibles. Segun el ejemplo que acabo de exponer, el circulo seria "objeto" y la mesa "zona de la pantalla". El circulo debe poderse orientar (en vez de un circulo imagina una cara o un animal para entender mejor lo de la orientacion) Si he aclarado el funcionamento continuo con las preguntas. Yo creo que es casi seguro que lo correcto es usar while (asi me lo dijo un programador que conozco, no me ayudo mas xk nunca ha trabajado en AS). En tal caso: como arreglo el codigo para que vaya correctamente con while? Y en caso que lo adecuado sean los llamados "timers" me gustaria un poco de explicacion de como se usan y a poder ser como se usarian en este caso. (Aclaro, ya que antes no lo he dicho y estoy contestando desde el celular y no me deja modificar el texto no se por que, que uso while porque al querer un desplazamiento lineal desde el punto inicial hasta encima del objeto-zona y haciendo mas o menos veces la reproduccion de un clip de pelicula (por ejemplo el circulo rodando) en funcion de la distancia de "objeto" a "zona", por lo que me es mucho mas comodo usar while que if.
Tambien debo decir que me gustaria poder contactar a traves de messenger o qualquier otro tipo por el estilo para solucionar dudas de forma mas eficaz.

Muchas gracias por la ayuda prestada y la que aun espero ;D
  #4 (permalink)  
Antiguo 16/06/2011, 17:40
Avatar de jahepi
Colaborador
 
Fecha de Ingreso: diciembre-2004
Ubicación: Querétaro
Mensajes: 1.124
Antigüedad: 19 años, 3 meses
Puntos: 43
Respuesta: Problema de programacion de juego con AS3

Cita:
Iniciado por Liurk Ver Mensaje
Bueno, la verdad, soy nuevo en AS y aun no lo llevo muy bien, ademas de ser mi primer lenguaje de programacion. Pondre el ejemplo de lo que quiero hacer: Tengo un objeto (por ejemplo un circulo o cuadrado) y quiero que cuando se haga click a una zona del escenario (encima de otro objeto (por ejemplo una mesa) el objeto se oriente hacia la mesa y vaya hasta encima suyo. Como el programa esta recien empezado se trata de algo unidireccional, pero mi intencion es terminar haciendolo en 4 direcciones posibles. Segun el ejemplo que acabo de exponer, el circulo seria "objeto" y la mesa "zona de la pantalla". El circulo debe poderse orientar (en vez de un circulo imagina una cara o un animal para entender mejor lo de la orientacion) Si he aclarado el funcionamento continuo con las preguntas. Yo creo que es casi seguro que lo correcto es usar while (asi me lo dijo un programador que conozco, no me ayudo mas xk nunca ha trabajado en AS). En tal caso: como arreglo el codigo para que vaya correctamente con while? Y en caso que lo adecuado sean los llamados "timers" me gustaria un poco de explicacion de como se usan y a poder ser como se usarian en este caso. (Aclaro, ya que antes no lo he dicho y estoy contestando desde el celular y no me deja modificar el texto no se por que, que uso while porque al querer un desplazamiento lineal desde el punto inicial hasta encima del objeto-zona y haciendo mas o menos veces la reproduccion de un clip de pelicula (por ejemplo el circulo rodando) en funcion de la distancia de "objeto" a "zona", por lo que me es mucho mas comodo usar while que if.
Tambien debo decir que me gustaria poder contactar a traves de messenger o qualquier otro tipo por el estilo para solucionar dudas de forma mas eficaz.

Muchas gracias por la ayuda prestada y la que aun espero ;D
Hola Liurk !

Ya me queda más claro lo que pretendes hacer, en estos casos es mejor escuchar por el evento ENTER_FRAME de tu movieclip "objeto", este evento se dispara dependiendo de como tengas configurado los cuadros por segundo de tu película, si lo tienes a 12 fps, ese evento se dispara 12 veces por segundo.

Puedes indicarle a tu movieclip objeto que te notifique ese evento, y así poder crear animaciones personalizadas para este o para alguna otra finalidad.

Te dejo un ejemplo, para que te quede más claros los conceptos, nada mas crea un movieclip con nombre de instancia objeto y coloca el código en la raiz, compila y dale clic al escenario para que el objeto siga hasta esa posición.

Código actionscript:
Ver original
  1. // Declaramos nuestras variables para guardar hasta donde se moverá nuestro MovieClip
  2. var xTo:Number;
  3. var yTo:Number;
  4.  
  5. //Registramos el listener para guardar la posición X y Y del mouse al darle clic al escenario
  6. stage.addEventListener(MouseEvent.CLICK, onClick);
  7. function onClick(evt:MouseEvent):void {
  8.     xTo = mouseX;
  9.         yTo = mouseY;
  10. }
  11.  
  12. //Registramos el listener para que nos notifique por cada uno de los cuadros por segundo (fps)
  13. objeto.addEventListener(Event.ENTER_FRAME, onEnterFrameEvent);
  14. function onEnterFrameEvent(event:Event):void {
  15.     event.target.x += (xTo - event.target.x) * 0.5;
  16.     event.target.y += (yTo - event.target.y) * 0.5;
  17. }


Un saludo y suerte !
__________________
Una contraseña es como la ropa interior. No deberías dejarlas afuera a la vista de otras personas, deberías cambiarla regularmente, y ni se te ocurra prestarla a extraños.
  #5 (permalink)  
Antiguo 16/06/2011, 23:56
Avatar de Liurk  
Fecha de Ingreso: junio-2011
Ubicación: España
Mensajes: 5
Antigüedad: 12 años, 9 meses
Puntos: 0
Respuesta: Problema de programacion de juego con AS3

Mmm buenas de nuevo.
Muchas gracias por el aporte, no se si es exactamente lo que buscaba, pero de seguro me sirve, ahora estoy modificando un poco el codigo para que se adapte a lo que necesito, de hecho hay algo que me gustaria arreglar de ahí, y esque me gustaria que mi "objeto" hiciera su animacion mas o menos veces dependiendo de la distancia, pero siempre a la misma velocidad, independientemente de la distancia (me he fijado que para ir a poca distancia tarda lo mismo que para ir a una distancia lejana, por lo que parece que tarde mas a ir a un lugar cercano que lejano, y lo que yo quiero es poder tenerle una animacion "predeterminada" como lo seria que un circulo diese una vuelta sobre si mismo y que la hiciera tantas veces como fuera necesario para ir al "objeto-zona" donde se haya hecho un click. Pondre otro ejemplo para aclarar aun mas:

Imaginemos que tengo dibujadas en el escenario 16 mesas (organizadas en 4x4), y tengo como "objeto mobil" una manzana, que inicialmente se encuentra en cualquiera de las 16 mesas. Lo que quiero es poder desplazar la manzana de una mesa a otra (obviamente pasando por encima de las otras mesas que se encuentren entre la inicial y la final) y que para cada cambio de mesa a mesa hiciera una animacion (donde por ejemplo la manzana gira sobre si misma), de forma que en el cambio de una mesa a otra adyacente a esa el tiempo de cambio fuera de 1 animacion entera, el cambio de una mesa a otra que estuviera 2 mesas a la derecha fuera 2 animaciones y (en un caso hipotetico de que tubiesemos una plantilla enorme de 10x10 mesas) tardase 10 animaciones si tuviera que ir entre 10 mesas.

Espero haber aclarado las ultimas dudas posibles, ahora mismo no puedo encargarme muy bien del codigo solo, ya que este juego lo estamos haciendo un amigo y yo, y el es el que sabe programar mejor de entre él y yo, pero no nos va del todo :S. Por eso recurrimos a este foro .

Muchas gracias de nuevo Jahepi, espero que me soluciones las ultimas dudas ^^, como siempre: muchas gracias
  #6 (permalink)  
Antiguo 17/06/2011, 10:28
Avatar de jahepi
Colaborador
 
Fecha de Ingreso: diciembre-2004
Ubicación: Querétaro
Mensajes: 1.124
Antigüedad: 19 años, 3 meses
Puntos: 43
Respuesta: Problema de programacion de juego con AS3

Hola Liurk !

El ejemplo anterior sólo fue una implementación desde cero de como puedes hacer una animación de un movieclip de un punto a otro.

Pero te tengo una buena noticia, hay una librería que simplifica enormemente el trabajo con las animaciones, y a mi parecer es justamente lo que necesitas en tu proyecto, me refiero a TweenLite.

Visita el sitio y lee toda la documentación, el código anterior se reduciría a estas pocas líneas de código:

Código actionscript:
Ver original
  1. // Importamos las clases del paquete greensock
  2. import com.greensock.*;
  3.  
  4. stage.addEventListener(MouseEvent.CLICK, onClick);
  5. function onClick(evt:MouseEvent):void {
  6.     TweenLite.to(objeto, 1, {x:mouseX, y:mouseY});
  7. }


Si te fijas en esta línea:
Código actionscript:
Ver original
  1. TweenLite.to(objeto, 1, {x:mouseX, y:mouseY});

TweenLite se encarga de hacer la animación del objeto, ya no es necesario escuchar por el evento ENTER_FRAME, TweenLite lo hace por nosotros.
El segungo parámetro es el tiempo que va a durar la animación, y entre las llaves están las propiedades del objeto y como valores las posiciones X y Y destino.

Si quieres cambiar la rotación del objeto, pues muy fácil, sólo agregas la propiedad rotation dentro de las llaves junto con su valor que lo tendrás que calcular utilizando un poquitín de trigonometría.

Ve muy bien la documentación, puedes cambiar tipos de animación, efectos, etc...

Espero haberte sido de ayuda.

Un saludo y suerte !
__________________
Una contraseña es como la ropa interior. No deberías dejarlas afuera a la vista de otras personas, deberías cambiarla regularmente, y ni se te ocurra prestarla a extraños.

Etiquetas: as3, juego, programacion
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:35.