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

Menu (while) se cicla...

Estas en el tema de Menu (while) se cicla... en el foro de Flash y Actionscript en Foros del Web. Que tal, en esta ocasion estoy realizando un menu que hace lo siguiente: al clickear un boton: aparece y se abre una ventana; al clikearlo ...
  #1 (permalink)  
Antiguo 03/02/2007, 14:19
 
Fecha de Ingreso: febrero-2005
Ubicación: MEXICO
Mensajes: 455
Antigüedad: 12 años, 9 meses
Puntos: 5
Exclamación Menu (while) se cicla...

Que tal,
en esta ocasion estoy realizando un menu que hace lo siguiente:

al clickear un boton:
aparece y se abre una ventana;
al clikearlo de nuevo se cierra la ventana y se abre nuevamente

El objetivo de esto que el primer boton clickeado abra su respectiva ventana; y los demas botones que se clickeen cierren la ventana que fue abierta anteriormente y abran la suya. (si el mismo boton se presiona de nuevo, lo que pasara, de momento, es que cerrara su ventana y la abrira de nuevo...)

Cabe destacar que cada ventana tiene la misma apariencia, y se encuentra en la misma posicion, es decir, al efectuar la animacion solo cambiara el contenido de la ventana, despues del abrir y cerrar.

La ventana identifica cuando fue abierta y cuando fue cerrada y lo guarda en la variable 'situacion'

Bueno, este es el codigo que utilizo, para el boton que controla a la ventana:

on(release){
//este boton controlara a 'ventana'
with(_root.ventana) {

/*por default, la ventana es invisible, asi que esta es la comprobacion
para hacerla visible*/
if (_visible==false)
_visible = true;

/*estas las comprobaciones de los modos...
donde modo(1) significa que no ha sido abierta por primera vez,
y modo(2) significa que ya fue abierta por primera vez]
la variable modo se encuentra en linea de tiempo principal*/
if(_parent.modo==1) gotoAndPlay("abrir");

//si la ventana ya ha sido abierta...
if(_parent.modo==2){
gotoAndPlay("cerrar");

/*esta deberia ser una comprobacion que verificara
cuando se ha cerrado la ventana, para entonces
volverla a abrir*/

//la explico:

//1.-mientras la ventana no se haya cerrado
while(situacion!="cerrada"){
/*2.-cuando este a punto de cerrarse
[donde 'casicerrada' se encuentra un fotograma
antes que 'cerrada' en su respectiva linea de
tiempo de ventana]*/
if(situacion=="casicerrada"){
//3.-abrela de nuevo
gotoAndPlay("abrir");
/*4.-cambio la situacion a 'cerrada'
para que el ciclo termine*/
situacion="cerrada";
//5.-o lo forzo a salir del while
break;}//cierra if
}//cierra while



} //cierra if
} //cierra with
} //cierra on(release)

bueno pues, creo que el problema esta en el ciclo while, puesto que toda me funciona bien hasta ahi.. (lo compruebo cuando desactivo esa parte del codigo)...
yo supongo que ese while se quedaria a esperar hasta que la ventana "casi se se cerrara para entonces abrila por ultima vez"...pero se me cicla, eso es lo peor por que segun yo se me deberia de salir (del while) con el break..


alguna sugerencia?, gracias.
__________________

  #2 (permalink)  
Antiguo 03/02/2007, 14:43
Avatar de jahepi
Colaborador
 
Fecha de Ingreso: diciembre-2004
Ubicación: Querétaro
Mensajes: 1.124
Antigüedad: 13 años
Puntos: 43
Re: Menu (while) se cicla...

Hola cpucpu!

Fíjate que flash tiene la manía de absorver toda la carga asignada del cpu cuando utilizas bucles while´s, for´s, etc..., para esperar la respuesta a cierto evento y por eso te sale ese mensaje :P, lo mejor que puedes hacer para simular un "hilo", es utilizar el evento onEnterFrame así no se sobrecargará, sería algo así:


Código:
this.onEnterFrame = function():Void {
   if(situacion == "cerrada") {
      this.onEnterFrame = null; //terminamos el hilo
  }
};

Saludos!
  #3 (permalink)  
Antiguo 03/02/2007, 19:38
 
Fecha de Ingreso: febrero-2005
Ubicación: MEXICO
Mensajes: 455
Antigüedad: 12 años, 9 meses
Puntos: 5
Re: Menu (while) se cicla...

mmm...mira, lo que pasa es que no estoy seguro de lo q ese codigo hace, pero esto creo que hace y asi es como lo pongo en mi pelicula:

on(release){
//este boton controlara a 'ventana'
with(_root.ventana) {

/*por default, la ventana es invisible, asi que esta es la comprobacion
para hacerla visible*/
if (_visible==false)
_visible = true;

/*estas las comprobaciones de los modos...
donde modo(1) significa que no ha sido abierta por primera vez,
y modo(2) significa que ya fue abierta por primera vez]
la variable modo se encuentra en linea de tiempo principal*/
if(_parent.modo==1) gotoAndPlay("abrir");

//si la ventana ya ha sido abierta...
if(_parent.modo==2){
gotoAndPlay("cerrar");

onEnterFrame = function():Void {
if(situacion == "cerrada") {
gotoAndPlay("abrir");
onEnterFrame = null; //terminamos el hilo
}
}


} //cierra if
} //cierra with
} //cierra on(release)


mmm...lo estoy colocando bien no?
es la primera vez q uso 'onenterframe' y no estoy muy familiriazado, pero como lo veo, hace esto:

encambiodeframe = function():Void {
si se cierra la ventana {
vuelvete a abrir

onEnterFrame = null; //y sal del..ciclo? }
}


lo supuse correto?
pues mira, por lo menos ya no se me cicla, es decir:
se abre y cierra..pero no se vuelve a abrir, como que algo no va bien o sera q no entendi onenterframe...

Otra cosa, sobre lo que mencionaste hacerca de los ciclos:
dices que aunque estuvieran correctos, existe la posibilidad de que no corrieran bien?
__________________

  #4 (permalink)  
Antiguo 03/02/2007, 19:52
 
Fecha de Ingreso: septiembre-2006
Mensajes: 1.193
Antigüedad: 11 años, 2 meses
Puntos: 30
Re: Menu (while) se cicla...

Cita:
Iniciado por cpucpu Ver Mensaje
mmm...mira, lo que pasa es que no estoy seguro de lo q ese codigo hace, pero esto creo que hace y asi es como lo pongo en mi pelicula:
como que no sabes que hace tu codigo?.
  #5 (permalink)  
Antiguo 03/02/2007, 19:56
 
Fecha de Ingreso: febrero-2005
Ubicación: MEXICO
Mensajes: 455
Antigüedad: 12 años, 9 meses
Puntos: 5
Re: Menu (while) se cicla...

no, me refiero al que me proporcionaron, digo que no estoy seguro de lo q hace...pero trato de suponer lo que hace, para que me digan si estoy en lo correcto
__________________

  #6 (permalink)  
Antiguo 04/02/2007, 12:20
Avatar de jahepi
Colaborador
 
Fecha de Ingreso: diciembre-2004
Ubicación: Querétaro
Mensajes: 1.124
Antigüedad: 13 años
Puntos: 43
Re: Menu (while) se cicla...

Hola cpucpu!

Creo que te confundiste un poco con el uso del evento onEnterFrame, mira todas las instancias o objetos movieclip tienen un evento llamado onEnterFrame, que le puedes asignar un método callback, de esta manera cada instancia reacciona diferente a ese evento, este es llamado de acuerdo a la tasa de cuadros por segundo que este configurado tu escenario, por decir si lo tienes a 12 cuadros por segundo, ese evento será llamado 12 veces por segundo.

Supongamos que creaste un movieclip en tu escenario con nombre de instancia "miMc", y vamos a asignarle la referencia a un método en el evento onEnterFrame:

Código:
miMc.onEnterFrame = function():Void {
   trace(this);
};
Ese pedazo de código se va a estar ejecutando indefinídamente, pero si tu quieres más adelante puedes cancelar las llamadas: miMc.onEnterFrame = null

El "this", hace referencia al movieclip "miMc", entonces puedes acceder a sus propiedades y métodos utilizando esta sintaxis.

Código:
miMc.onEnterFrame = function():Void {
   trace(this._name);
   trace(this._x);
   trace(this._y);
};
Okas, espero me hayas entendido y no te haya hecho más pelotas XD


Un saludo y suerte !
  #7 (permalink)  
Antiguo 05/02/2007, 16:57
 
Fecha de Ingreso: febrero-2005
Ubicación: MEXICO
Mensajes: 455
Antigüedad: 12 años, 9 meses
Puntos: 5
Re: Menu (while) se cicla...

ok, ya me funciona el menu, muchas gracias por eso, ya le ando entendiendo al enterframe, por cierto al parecer si fue como lo supuse...

bueno, de cualquier forma hay dos cosas sencillas que no me quedaron claras, para quien sea que sea al respuesta:

1.-pregunta general: en ciertos casos, aunque existieran ciclos correctos, existe la posibilidad de que no corrieran bien en flash (puesto que 'flash tiene la manía de absorver toda la carga asignada del cpu')?

2.-esta es especifica del codigo que mostre:
por que si el evento onEnterframe lo cargo dentro de un with(_root.ventana){ }

el evento onEnterframe debe cargarse de la forma:

_root.ventana.onEnterFrame = function():Void {
if(situacion == "cerrada") {
gotoAndPlay(2);
onEnterFrame = null; //terminamos el hilo
}//cierra if
}//cierra onEnterframe

es decir, por que onEnterframe no hereda la ruta del with (_root.ventana) y la converte en su propia ruta por default??
(this.onEnterframe u onEnterframe no funcionanan...debe ser _root.ventana.onEnterframe)

por ejemplo el segundo onEnterframe (el que cierra el "ciclo") si la hereda del primer onEnterframe
__________________

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:31.