Comunidad de diseño web y desarrollo en internet online

Pausar y reanudar swf externo

Citar            
MensajeEscrito el 17 Sep 2011 04:46 am
Buenas,

Espero que aya buscado bien y no este repitiendo el post, pero en los post relacionados no e visto algo concreo que me ayude a resolver mi problema, y es el siguiente.

Tengo que hacer un player para 3 archivos swf, que van a correr como si fueran un video, ya tengo un codigo que sirve para cargar los swf dentro de mi player, ahora necesito es hacer que los botones de pausa y reanudar (pausa y play) de mi player hagan que se pause y se reanude la animacion que tengo en mis swf que voy a presentar dentro del mismo.

Adjunto dejo mi archivo fuente para ver si alguien me puede decir como hacerlo o, si hay algun totorial que no aya visto aquí porfavor me mande el link :)

Muchas gracias de ante mano por sus respuestas y quedo en espera de ellas.

Flash

Por gersonruiz

36 de clabLevel



Genero:Masculino  

Diseñador Gráfico

firefox
Citar            
MensajeEscrito el 17 Sep 2011 02:42 pm
Si la animación que cargas está en la línea de tiempo principal de la peli cargada, solo tienes que darle un stop

Código ActionScript :

//Así obtengo una referencia al root del swf cargado, usualmente lo hago en el evento complete
var timeline:MovieClip = Loader.content
//luego uso esa referencia para hacer el stop
MovieClip(timeline).stop()


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 17 Sep 2011 04:38 pm
mmm no entendi :( si puedes porfa echale un ojo a mi archivo flash el que publique aquí, para que veas como lo tengo, la cosa es que no se como hacer o donde poner el codigo que haga el stop (pausa) a y luego play.

Voy a ver donde coloco el codigo que me enviastes, solo que por el momento se me ocurre poner la primera linea de codigo que carga el swf externo y el segundo codigo lo voy a poner en el lugar donde quiero que cuando el boton haga clik se detenga... eso es lo que voy a probar, porque no entendi muy bien lo que me dices pero muchas gracias y cualquier cosa te aviso :)

Por gersonruiz

36 de clabLevel



Genero:Masculino  

Diseñador Gráfico

firefox
Citar            
MensajeEscrito el 17 Sep 2011 04:46 pm
mira por ejemplo este es el codigo que tengo para cargar el swf externo

Código :

var loader:Loader = new Loader();
loader.load(new URLRequest("ENSA_1.swf"));

loader.contentLoaderInfo.addEventListener(Event.COMPLETE, insertMovie);


function insertMovie(evt:Event):void{ 
   
   addChild(loader);
   
}


y este codigo esta dentro de un movieclip que a su vez tiene una mascara para así evitar que salga algo de la animacion que no quiero que salga (porque esta fuera del stage del sfw, pero cuando lo cargo externo se ve todo lo que deje fuera del stage en animamción)

y el boton de pausa y play esta afuera junto al movieclio contenedor del codigo ya citado

Por gersonruiz

36 de clabLevel



Genero:Masculino  

Diseñador Gráfico

firefox
Citar            
MensajeEscrito el 19 Sep 2011 03:52 pm
Bueno luego de dias de buscar encontre esta web donde alguien posteo como hacer lo que quiero... solo que es un poco diferente de lo que estaba haciendo
http://www.parorrey.com/blog/flash-development/as3-load-external-swf-into-movieclip-stop-it-at-lastframe-from-main-flash-movie/

y este es el codigo que el puso que funciona a la perfeccion

Código :

// This is the Loader instance that will load your SWF.
var swfLoader:Loader = new Loader();
 
// URLRequest points to your external SWF
var swfFile:URLRequest = new URLRequest("external-file.swf");
 
//create the container Movie Clip to load swf
var container:MovieClip= new MovieClip();
 
//create the player buttons MovieClip from library
var player:swfPlayerBt = new swfPlayerBt(); 
 
// Assign an event listener so that Flash informs you when the SWF has been loaded.
swfLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, swfLoadedHandler);
 
//define a MovieClip object to store the reference of currently loaded swf
//This will be used to access the timeline of loaded swf
var currentSWF:MovieClip = new MovieClip();
 
function swfLoadedHandler(e:Event):void {
   trace("swf loaded");
 
  //type cast the loaded swf into MovieClip object
    currentSWF = MovieClip(swfLoader.content);       
 
   //add EventListeners for swfPlayer buttons
   player.btForward.addEventListener(MouseEvent.CLICK, button_forward);   
   player.btRewind.addEventListener(MouseEvent.CLICK, button_rewind);   
   player.btPause.addEventListener(MouseEvent.CLICK, button_pause);   
   player.btPlay.addEventListener(MouseEvent.CLICK, button_play);   
 
   //this is most important step, 
   //Here we add an Event Listener for every frame of loaded swf 
  //so that we could stop/play or do whatever we want on its timeline
 
 currentSWF.addEventListener(Event.ENTER_FRAME , checkLastFrame);
 
//this function will check if swf has reached lastframe
    function checkLastFrame(e:Event):void {   
    //if it the current frame of the swf equals the last frame
   if (currentSWF.currentFrame == currentSWF.totalFrames) {
            currentSWF.stop();
       // trace("Simple! Done!!");     
      }    
 
  function button_forward(e:Event):void{
    currentSWF.nextFrame();
     } 
 
function button_rewind(e:Event):void{
    currentSWF.prevFrame();
     } 
function button_pause(e:Event):void{
    currentSWF.stop();
     }
function button_play(e:Event):void{
    currentSWF.play();
     }
 
}
 
//just load the swf file
swfLoader.load(swfFile);
 
//to display it, just add the loaded swf to container
container.addChild(swfLoader);
 
//set the position of player buttons
player.x =200;
player.y =350;
//attach the swfPlayer buttons 
container.addChild(player);


solo que ahora tengo un problema.... a la hora de hacer la pausa me da la pausa al swf pero solo a la linea de tiempo principal, no a los otros movieclips que tengo dentro de la misma linea de tiempo, si alguien me puede dar una mano con este ultimo detallito se lo agradecería mucho.

NOTA: creanme... luego de este proyecto... voy a dedicar buena parte de mi tiempo libre a estudiar AS3 porque por lo visto en mi trabajo voy a tener que necesitarlo mas a menudo :D

Por gersonruiz

36 de clabLevel



Genero:Masculino  

Diseñador Gráfico

firefox
Citar            
MensajeEscrito el 19 Sep 2011 03:58 pm
No hay un comando "stopAll" (como para el sonido), tienes que parar cada uno de los MovieClips interiores. Si implementas en la peli que cargas una función parar que haga parar todos los clips internos, entonces la llamas cuando quieres hacer el stop (en vez de hacer stop directamente)

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 19 Sep 2011 04:21 pm
te entiendo y a la vez no entiendo, osea intiendo que no hay una funcion stopAll como para el audio pero para los movieclips, pero en el resto me perdi :(

porque no se si tengo que hace una funcion que detenga los movieclips dentro de cada swf de animaciones que ya hice o hacela en el reproductor y llamarla desde el reprocuctor

NOTA: espero que tengan algo de pasciencia con migo es que yo solo soy diseñador, y de programacion no se mucho y ya estoy mas que convensido que tengo que ver como agarro un cursillo para principiantes para entender todas las cosas basicas por lo menos. :)

Por gersonruiz

36 de clabLevel



Genero:Masculino  

Diseñador Gráfico

firefox
Citar            
MensajeEscrito el 19 Sep 2011 04:24 pm
La función la haces en tu animación, supongamos que le pones parar, luego desde el reproductor modificas el stop, que quedaría

Código ActionScript :

function button_pause(e:Event):void{
    currentSWF.parar();
 }


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 19 Sep 2011 04:36 pm
mmmmmm voy a probar eso a ver como me va gracias!!!!

cualquier cosa aviso :D

Por gersonruiz

36 de clabLevel



Genero:Masculino  

Diseñador Gráfico

firefox
Citar            
MensajeEscrito el 19 Sep 2011 06:10 pm
mmmm por el momento me esta dando error porque me dice que parar no es una funcion, asi que lo que voy a hacer es meter la funcion en una clase dentro de un archivo .as a ver si estando de forma global no me da problemas

Por gersonruiz

36 de clabLevel



Genero:Masculino  

Diseñador Gráfico

firefox
Citar            
MensajeEscrito el 19 Sep 2011 10:11 pm
hice exactamente lo que me dijistes... y FUNCIONA hasta cierto punto, asi que el codigo en mi player quedo de la siguiente forma.

Código :

function button_pause(e:Event):void{
    currentSWF.stop();
    currentSWF.parar();
     }
     
function button_play(e:Event):void{
    currentSWF.play();
    currentSWF.reanudar();
     }
 
}


y este otro es archivo as que cree para controlar la funcion

Código :

package  {
   
   import flash.display.MovieClip; // para que importe el movie clip de flash
   import flash.events.MouseEvent; // para que importe los eventos mouseEvent desde el flash
   import flash.display.SimpleButton; // para que no me de el error brujon
   
   
   public class ENSA_2_old extends MovieClip {
      
// codigos para detener movieclips      
      public function parar():void{
         cuartoScen_uno.ventanas.stop();
         cuartoScen_uno.tvCarrera.stop();
            cuartoScen_uno.tvCarrera.carroG.stop();
            cuartoScen_uno.tvCarrera.carroA.stop();
            cuartoScen_uno.tvCarrera.carroAz.stop();
            cuartoScen_uno.tvCarrera.carroR.stop();
         cuartoScen_uno.relogR.stop();
         cuartoScen_uno.ninoJugaUno.stop();
         cuartoScen_uno.ninoJugaDos.stop();
         cuartoScen_uno.ninoJugaProta.stop();
         relogL.stop();// si añado este me da problemas
      }

// codigos para reanudar movieclips
      public function reanudar():void{
         cuartoScen_uno.ventanas.play();
         cuartoScen_uno.tvCarrera.play();
            cuartoScen_uno.tvCarrera.carroG.play();
            cuartoScen_uno.tvCarrera.carroA.play();
            cuartoScen_uno.tvCarrera.carroAz.play();
            cuartoScen_uno.tvCarrera.carroR.play();
         cuartoScen_uno.relogR.play();
         cuartoScen_uno.ninoJugaUno.play();
         cuartoScen_uno.ninoJugaDos.play();
         cuartoScen_uno.ninoJugaProta.play();
         relogL.play();// si añado este me da problemas
      }
   }
}


este codigo va amarrado al root del flash no a un movieclip en espeficico, el asunto es que cuando a un item de la segunda scena ("relogL") y le doy pausa en la primera scena me lanza estos errores

Código :

TypeError: Error #1009: No se puede acceder a una propiedad o a un método de una referencia a un objeto nulo.
   at ENSA_2_old/parar()
   at Function/<anonymous>()
TypeError: Error #1009: No se puede acceder a una propiedad o a un método de una referencia a un objeto nulo.
   at ENSA_2_old/reanudar()
   at Function/<anonymous>()

me pausa la primera scena por completo con todos los otros movieclips que añadi pero.... al pasar a la segunda scena... no me detiene el unico movieclip que quiero que se detenga "relogL" y me vuelve a salir el mismo error que ya me salio.

entiendo que es por:
como le estoy diciendo que me detenga ciertos movieclip y no encuentra el bendito relogL me da herror pero aun asi... a los demas los detiene y reanuda sin problemas, el asunto es que cuando paso a la segunda scena... no me importaria que me lanzara el error si me dejara darle stop al relog de mordor pero entonces no lo hace.

ahora... la pregunta del millon.... como hago para que no me de error o como minimo que me pause los movieclip que tengo en las demas scenas?

porfa si me pueden ayudar y decirme que estoy haciendo mal?

Por gersonruiz

36 de clabLevel



Genero:Masculino  

Diseñador Gráfico

firefox
Citar            
MensajeEscrito el 19 Sep 2011 11:44 pm
Para evitar que salgan errores usa bloques try/catch

Código ActionScript :

try{
  algunClip.stop()
} catch(e:Error){
   //si quieres puedes poner un trace acá
}


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 20 Sep 2011 01:13 pm
y este codigo donde lo pongo??

asi??

Código :

 public function parar():try{
         cuartoScen_uno.ventanas.stop();
         cuartoScen_uno.tvCarrera.stop();
         {
catch(e:Error){

   trace("en caso que quiera poner algo claro esta");

}


o estoy equibocado?

Por gersonruiz

36 de clabLevel



Genero:Masculino  

Diseñador Gráfico

firefox
Citar            
MensajeEscrito el 20 Sep 2011 01:42 pm
Los dos puntos después del paréntesis que declara la función son el tipo de dato que devuelve, o void si no lo devuelve, no puede ser un try, sería algo como

Código ActionScript :

public function parar():void{
     try{
         cuartoScen_uno.ventanas.stop();
         cuartoScen_uno.tvCarrera.stop();
         } catch(e:Error){
           trace("en caso que quiera poner algo claro esta");
         }
}


Cuando dudas de la sintaxis, lo mejor es consultar la ayuda. También tienes que tener cuidado, porque al primer comando que falla el resto no se ejecuta, entonces puede que necesites un try/catch para cada comando

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 20 Sep 2011 01:46 pm
ooooo gracias!!!! voy a intentar con eso a ver

y de verdad agradesco tu pasciencia y ayuda!!!

luego aviso como me fue!

Por gersonruiz

36 de clabLevel



Genero:Masculino  

Diseñador Gráfico

firefox
Citar            
MensajeEscrito el 20 Sep 2011 04:01 pm
FUNCIONA A LA PERFECCION!!!

solisarg escribió:


Código ActionScript :

public function parar():void{
     try{
         cuartoScen_uno.ventanas.stop();
         cuartoScen_uno.tvCarrera.stop();
         } catch(e:Error){
           trace("en caso que quiera poner algo claro esta");
         }
}

Jorge


solo que tube que hacer otras pequeñas modificaciones a mi codigo y ya no da herror y todo hace pausa pongo mis codigos por si a alguien les sirve :D

este es el que esta en mi player (solo pongo la parte de los stops y los play por razones de acortar el codigo porque el resto del codigo esta mas arriba :D)

Código ActionScript :

function button_pause(e:Event):void{
    currentSWF.stop();
    currentSWF.parar1();
    currentSWF.parar2();
    currentSWF.parar3();
// si tuve que hacer una funcion para cada escena de animacion :D para que no me diera problemas
     }
     
function button_play(e:Event):void{
    currentSWF.play();
    currentSWF.reanudar1();
    currentSWF.reanudar2();
    currentSWF.reanudar3();
// lo mismo que con la pausa... tuve que hacele una funcion por escena :)
     }


ahora el codigo de mi archivo as termino de la siguiente forma.

Código ActionScript :

package  {
   
   import flash.display.MovieClip; 
   import flash.events.MouseEvent; el flash
   import flash.display.SimpleButton; 
   
   
   public class nombreDeTuClase extends MovieClip {
      
// codigos para detener movieclips ESCENA 1
      public function parar1():void{
         try{
         cuartoScen_uno.ventanas.stop();
         cuartoScen_uno.tvCarrera.stop();
            cuartoScen_uno.tvCarrera.carroG.stop();
            cuartoScen_uno.tvCarrera.carroA.stop();
            cuartoScen_uno.tvCarrera.carroAz.stop();
            cuartoScen_uno.tvCarrera.carroR.stop();
         cuartoScen_uno.relogR.stop();
         cuartoScen_uno.ninoJugaUno.stop();
         cuartoScen_uno.ninoJugaDos.stop();
         cuartoScen_uno.ninoJugaProta.stop();
         problematicoR.stop();
         } catch(e:Error){ 
                  //si quieres puedes poner un trace acá 
            }
      }
// codigos para reanudar movieclips ESCENA 1
      public function reanudar1():void{
         try{ 
         cuartoScen_uno.ventanas.play();
         cuartoScen_uno.tvCarrera.play();
            cuartoScen_uno.tvCarrera.carroG.play();
            cuartoScen_uno.tvCarrera.carroA.play();
            cuartoScen_uno.tvCarrera.carroAz.play();
            cuartoScen_uno.tvCarrera.carroR.play();
         cuartoScen_uno.relogR.play();
         cuartoScen_uno.ninoJugaUno.play();
         cuartoScen_uno.ninoJugaDos.play();
         cuartoScen_uno.ninoJugaProta.play();
         problematicoR.play();
         } catch(e:Error){ 
                  //si quieres puedes poner un trace acá 
            }
      }
      
      
// codigos para detener movieclips ESCENA 2
      public function parar2():void{
         try{
         problematicoR.stop();
         } catch(e:Error){ 
                  //si quieres puedes poner un trace acá 
            }
      }
// codigos para reanudar movieclips ESCENA 2
      public function reanudar2():void{
         try{
         problematicoR.play();
         } catch(e:Error){ 
                  //si quieres puedes poner un trace acá 
            }
      }
      
      
      
// codigos para detener movieclips ESCENA 3
      public function parar3():void{
         try{
         scena3anima.stop();
         scena3anima.tv3.stop();
         scena3anima.relogR3.stop();
         scena3anima.nino1_3.stop();
         scena3anima.nino2_3.stop();
         scena3anima.cuerpo3.stop();
         } catch(e:Error){ 
                  //si quieres puedes poner un trace acá 
            }
      }
// codigos para reanudar movieclips ESCENA 3
      public function reanudar3():void{
         try{
         scena3anima.play();
         scena3anima.tv3.play()
         scena3anima.relogR3.play();
         scena3anima.nino1_3.play();
         scena3anima.nino2_3.play();
         scena3anima.cuerpo3.play();
         } catch(e:Error){ 
                  //si quieres puedes poner un trace acá 
            }
//y se puede seguir haciendo mas funciones para las demas escenas
      }
   }
}


gracias Jorge por tu ayuda!!!

bendiciones brother!!!

Por gersonruiz

36 de clabLevel



Genero:Masculino  

Diseñador Gráfico

firefox

 

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