Comunidad de diseño web y desarrollo en internet online

galeria swfs

Citar            
MensajeEscrito el 31 May 2011 12:11 pm
Hola, ¿qué tal? me estoy iniciando con AS3 y ando un poco atascado en un asunto.

Resulta que estoy haciendo una aplicación en la que tengo un principal.swf donde cargo otros 4 swf externos (secc01.swf, secc02.swf ...). Tengo también dos botones anterior y siguiente, en principal.swf, que harán que se cierre el swf abierto y se abra otro. Hasta ahí no tendría mucho problema. Lo que pasa es que he querido que antes de cerrarse el swf presente haga una animación de desvanecimiento en la linea de tiempo. Para eso les he puesto a todos esos swfs secundarios un primer stop antes de esa animación y otra al final. También uso un Timer para que el primer swf se cargue 3 segundos despues de empezar la peli. Dejo mejor el código completo de principal.swf donde se entenderá mejor.

Código ActionScript :

//importamos todas las clases necesarias.

import flash.net.URLRequest;
import flash.display.Loader;
import flash.events.Event;

import flash.utils.Timer;
import flash.events.TimerEvent;

import fl.transitions.Tween;
import fl.transitions.easing.*;
import fl.transitions.TweenEvent;
import flash.display.MovieClip;


//de entrada los botones anterior/siguiente no son visibles.

flechaant.visible = false;
flechasig.visible = false;


//aquí ponemos el número de swfs secc que tenemos.

var numseccs:Number = new Number(4);


/*hacemos que la variable "seccion", que será la que utilicemos para decir
qué swf cargamos sea un número al azar entre 1 y el numero de swfs que
tengamos. y hacemos un trace para asegurarnos de que va bien.*/

var seccion:Number = new Number(Math.ceil(Math.random() * numseccs));
trace(seccion);


/*creamos un primer contador que hace esperar 3 segundos que es lo que tarda
el abuelo en lanzar la primera bola*/

var contadorini:Timer = new Timer(3000,1);
contadorini.addEventListener(TimerEvent.TIMER, mostrar);
contadorini.start();


//creamos la función que se encarga de la carga de las secciones.;

function mostrar(evento:TimerEvent):void
{

   /*primero localizamos el swf sirviendonos de la variable "seccion" que
   es un número al azar, para que sea dinámico. Lo dejamos en el loader
   "cargador" para llamarlo más adelante.*/

   var ruta:URLRequest = new URLRequest("secc0" + seccion + ".swf");
   var cargador:Loader = new Loader();
   cargador.load(ruta);


   /*creamos un listener que nos avise de que el swf se ha cargado
   completamente para que no haya errores, y en ese momento llamamos a la
   funcion "esperar" que hará que el clip aparezca finalmente en pantalla.*/

   cargador.contentLoaderInfo.addEventListener(Event.COMPLETE, esperar);

   function esperar(evento:Event):void
   {

      /*cargamos el swf como clip dos niveles por debajo del último para
      que quede por debajo de los dos botones de las flechas, y estos
      los ponemos visibles.*/

      addChildAt(cargador.content as MovieClip, numChildren-2);

      if (seccion < numseccs)
      {
         flechasig.visible = true;
      }
      else
      {
         flechasig.visible = false;
      }
      if (seccion > 1)
      {
         flechaant.visible = true;
      }
      else
      {
         flechaant.visible = false;
      }

      /*les colocamos unos listeners a los botones para que lancen unas
      funciones cuando se haga click sobre ellos.*/

      flechasig.addEventListener(MouseEvent.CLICK, seccionsig);
      flechaant.addEventListener(MouseEvent.CLICK, seccionant);


      /*las funciones de los botones modifican la variable "seccion" para
      que se muestren los otros swfs y llaman a una función nueva para que
      los cargue.*/

      function seccionsig(evento:MouseEvent):void
      {
         if (seccion < numseccs)
         {
            seccion++;
         }
         else
         {
            seccion = numseccs;
         }
         trace(seccion);
         nueva(evento);
      }

      function seccionant(evento:MouseEvent):void
      {
         if (seccion > 1)
         {
            seccion--;
         }
         else
         {
            seccion == 1;
         }
         trace(seccion);
         nueva(evento);
      }
   }
}


/*la función "nueva" da play al swf externo para que muestre la animación
de cierre, elimina el contenido de ese swf que estámos cerrando y hace la
carga de uno nuevo.*/

function nueva(evento:Event):void
{
   MovieClip(cargador.content).play();
   
   cargador.unload();
   
   var ruta:URLRequest = new URLRequest("secc0" + seccion + ".swf");
   var cargador:Loader = new Loader();
   cargador.load(ruta);
      
   trace("hecho");
}


Posiblemente haya puesto varias cosas mal, pero me funciona todo hasta llegar a la parte de cargar un swf nuevo. Creo que el problema lo tengo con el asunto de llamar a funciones que están dentro de otra función, o desde otra... El error que me da es:

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

Por medinon

6 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Jun 2011 09:53 am
Igual he metido mucho rollo y no me explicado bien. Simplemente querría saber como se llama a una función que está anidada dentro de otra, o a una variable, o si en principio no hay que poner nada y el problema que tengo es otro, a lo mejor me falta decir que las funciones son "public"... o eso se sobreentiende si no pones nada? ayuda plis!

Por medinon

6 de clabLevel



 

firefox
Citar            
MensajeEscrito el 01 Jun 2011 12:52 pm
Las variables y funciones declaradas dentro de una función no valen solo dentro de la misma por
ej si hacemos

Código ActionScript :

function prueba():void
{
var prueba=4
}

trace (prueba)//undefined



si quieres uusarla tendrás que hacerla accesible dentroo de la función por ej:

Código ActionScript :


var $prueba
function prueba():void
{
var prueba=4
$prueba= prueba
}

trace ($prueba)//4



Espero que sea de utilidad saludos Maxx

Por MaxiiSan20

Claber

168 de clabLevel



Genero:Masculino  

Montevideo

firefox
Citar            
MensajeEscrito el 01 Jun 2011 01:59 pm
sí, lo sospechaba :D lo pruebo y ya os cuento si lo consigo solucionar.

Por medinon

6 de clabLevel



 

firefox
Citar            
MensajeEscrito el 02 Jun 2011 11:27 am
vale, estoy empezando a ver la luz. lo último que me quedaría por solucionar es cómo puedo coger un dato de una variable que tengo en un swf externo. He leído mucho sobre el tema pero aún así no me aclaro. Simplemente quiero que si tengo en un fotograma de swf externo algo así:

Código ActionScript :

var prueba:Number = new Number(1);



poder poner en el principal algo así:

Código ActionScript :

if (clipcargador.prueba == 1)
{
trace("guay");
}



y que funcione.

"clipcargador" seria el swf cargado convertido en clip, no sé si lo he hecho bien o puede estar ahí el problema:

Código ActionScript :

addChildAt(cargador, numChildren-3);
var clipcargador:MovieClip = new MovieClip();
clipcargador.addChild(cargador.content);

Por medinon

6 de clabLevel



 

firefox

 

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