Comunidad de diseño web y desarrollo en internet online

Problema con condicionales y ejecucion de funciones

Citar            
MensajeEscrito el 07 Feb 2012 05:51 pm
Buenas, tengo un problema con Flash CS4 y AS3. El problema es que quiero cargar un swf externo cuando se cumpla una condicion. La condicion es que haya un hitTest entre dos MC. Uno de los MC es fijo, que seria el activador, el resto son MC que estan en la escena, hay varios, cada uno con su instancia y tal, los llamare pelotas. Bueno pues lo que pasa es que estas pelotas, que estan sujetas a la fisica de BOX2D, tienen una funcion distinta cuando chocan con el activador, que apareca otro MC en la escena, una galeria de imagenes, tambien creada con AS3, y tienen una segunda funcion, que seria el "else" de este condicional, que es borrar la galeria que acaba de aparecer. La cuestion es que nunca puede tocar mas de una pelota el activador, por lo que no se cargarian dos galerias a la vez.
Bueno, despues de explicar la situacion, voy con el problema. Lo que me ocurre es que cuando choco una pelota con el activador se carga la galeria correspondiente a la pelota, pero se ralentiza la pelicula y no se si es que no me lo permite hacer o que es demasiada informacion para el flash y se casca. La cosa es que creo que lo que hace es cargar la galeria muchas veces, mientras sigue en contacto con el activador, y cuando la aparto para que no choquen, no me elimina la galeria de la escena.
El codigo que utilizo para hacer el hittest y la carga es este:

act.addEventListener(Event.ENTER_FRAME,activador);
function activador(event:Event) {
if (b2.hitTestObject(act)) {
var contenedor:MovieClip = new MovieClip();
var loader:Loader = new Loader();
loader.load(new URLRequest("GaleriaLogos.swf"));
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, insertMovie);
function insertMovie(evt:Event):void {
addChild(contenedor).name="contenedor";
contenedor.addChild(loader).name="loader";
}
} else {
contenedor.removeChild(contenedor)
}
}

No se si lo he colgado bien. Gracias de antemano.

Por games

10 de clabLevel



 

opera
Citar            
MensajeEscrito el 07 Feb 2012 09:20 pm
Puede que sea mucho preocesamiento de golpe, y Box2d tiene su propio hilo de hit .... no se si mejor no es aprovecharlo, anyway agrega un trace dentro de la función activador a ver si se ejecuta muchas veces en un solo choque

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 07 Feb 2012 09:24 pm
Te falta orden en tu código y condicionar mejor. Aquí te dejo lo que sería correcto basándome en tu código:

Código ActionScript :

var galleryShow:Boolean = false;
var galleryLoaded:Boolean = false;

var contenedor:MovieClip = new MovieClip();
addChild(contenedor);

var loader:Loader = new Loader();
function insertMovie(evt:Event):void {
   loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, insertMovie);

   galleryLoaded = true;
   contenedor.addChild(loader);
}

act.addEventListener(Event.ENTER_FRAME,activador);
function activador(event:Event) {
   if (b2.hitTestObject(act) && galleryShow == false) {
      galleryShow = true;
      if( galleryLoaded ){
         contenedor.addChild(loader);
      }else{
         loader.contentLoaderInfo.addEventListener(Event.COMPLETE, insertMovie, false, 0, true);
         loader.load(new URLRequest("GaleriaLogos.swf"));
      }
   } else {
      if( galleryShow && galleryLoaded ){
         contenedor.removeChild(loader);
      }else{
         if( galleryLoaded == false ){ // Si no esta cargado o no termino de cargar
            try {
               loader.close(); // Cancelamos la carga
            }catch(err:Error){
               // no hacemos nada si ocurre un error
            }
         }
      }
      galleryShow = false;
   }
}

No lo he probado, quizás le falten algunos ajustes, pero ahí esta la idea.

Suerte.

Por Otaku RzO

BOFH

1890 de clabLevel

12 tutoriales
1 articulo

Genero:Masculino   Desarrollador de GAIA Bastard Operators From Hell

Lima - Perú

chrome
Citar            
MensajeEscrito el 07 Feb 2012 09:27 pm
Lo que dice @solisarg es cierto, Box2D debe tener su propia forma de hacer la colisión. No tengo experiencia usándolo así que no podría ayudarte con eso.

Por Otaku RzO

BOFH

1890 de clabLevel

12 tutoriales
1 articulo

Genero:Masculino   Desarrollador de GAIA Bastard Operators From Hell

Lima - Perú

chrome
Citar            
MensajeEscrito el 09 Feb 2012 10:22 pm
Muchas gracias por vuestras respuestas. El codigo revisado no marcha bien, pero es lo que deciis, Box2D tiene sus clases propias para el hittest y da problemas. De todas formas me ha servido para rectificar el proyecto. He optado por pedir con los condicionales que llame a mu MC del escenario, con un movimiento de derecha a izquierda, y que sea ese MC el que llame al swf externo, que creo que es lo mas facil para mi nivel de formacion. Cuando lo termine os lo enseñare para que veais lo que me estoy planteando. Gracias de nuevo, vuestro foro sirve de mucho.

Por games

10 de clabLevel



 

opera

 

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