Comunidad de diseño web y desarrollo en internet online

uso de load

Citar            
MensajeEscrito el 06 Sep 2012 12:52 am
Hola amigos! tengo un pequeño problema que no se muy bien como resolver.. les cuento.
Estoy haciendo un pequeño juego en as3 y lo voy a exportar en un archivo .apk para poderlo usar en android.

En el stage tengo 3 botones (bueno, en realidad son más pero pongo 3 para simplificar). Si se pulsa sobre el boton1 se carga en el stage la imagen exterior1, si se pulsa sobre el boton2 se carga la imagen exterior 2 y si se pulsa sobre el 3 se carga la imagen exterior 3. Para hacer esto empleo el siguiente codigo:

Código ActionScript :

btn1.addEventListener(MouseEvent.CLICK,f1);
btn2.addEventListener(MouseEvent.CLICK,f2);
btn3.addEventListener(MouseEvent.CLICK,f3);

var contenedor1:Loader = new Loader();

function f1(event:MouseEvent)
{
        num = 0;
   contenedor1.load(new URLRequest("pers/imagen_" + num + ".png"));
}

function f2(event:MouseEvent)
{
        num = 1;
   contenedor1.load(new URLRequest("pers/imagen_" + num + ".png"));
}

function f3(event:MouseEvent)
{
           num = 2;
   contenedor1.load(new URLRequest("pers/imagen_" + num + ".png"));
}

addChild(contenedor1);


Hasta aquí todo funciona a la perfección.
Sin embargo, al instalar el documento .apk en el dispositivo android al no contener este la carpeta donde se encuentran las imagenes, como es lógico, no se carga nada.

Habia pensado que sería más facil trabajar con imágenes de la biblioteca que con imégenes externas por lo que e construido unos MC para que se carguen estos en vez de las imagenes externas.

En un principio pensé en crear un código del tipo:

Código ActionScript :

function f1(event:MouseEvent)
{
           var im1:Im1 = new Im1();
   addChild(im1);
}

function f2(event:MouseEvent)
{
           var im2:Im2 = new Im2();
   addChild(im2);
}

function f3(event:MouseEvent)
{
   var im3:Im3 = new Im3();
   addChild(im3);
}


sin embargo, más adelante necesito trabajar con la imagen que se carga en el stage. Por lo tanto tengo que crear las variables fuera de las funciones (porque sino en el código posterior me da error) y las tengo que llamar igual para luego trabajar con ellas. (Como en el código en el que empleo el load).

Mi pregunta es, ¿Cómo se usa load para cargar movieClips de la biblioteca? ¿Se puede? Si no se puede, ¿Cómo hago para crear una variable en la que pueda cargar cualquier tipo de contenido? o ¿Cómo hago para resolver esto?

Perdón por el texto tan largo... :S
Un saludo!! y muchas gracias de antemano.

Por aran89

21 de clabLevel



 

chrome
Citar            
MensajeEscrito el 06 Sep 2012 11:19 am
Para instanciar MovieClips de la biblioteca a los que hayas asignado una clase (click derecho en la biblioteca sobre el elemento, Propiedades) usas el operador new. Supongamos que le pones MiClip como nombre de clase, luego haces

Código ActionScript :

var mc:MiClip = new MiClip();
addChild(mc);


Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 06 Sep 2012 11:25 am
si, eso me queda claro. El problema está en que debo de llamar a varios tipos de Mc con el mismo nombre para poder trabajar luego con el seleccionado.
Y si los creo dentro de la función, al usarlo posteriormente me da error, dice que no está dentro del tiempo de compilacion por lo que se tienen que definir fuera de las funciones

Espero haber explicado...

Por aran89

21 de clabLevel



 

chrome
Citar            
MensajeEscrito el 06 Sep 2012 11:27 am
Para eso se usan las interfaces, y desde ya no es suficiente la clase automática que crea Flash. Tienes que darle clases a tus MC que implementen todos la misma interface (o extiendan de la misma clase), luego en la función especificas la interfase o clase padre como valor de retorno.
Sorry, mire muy por encima tu POST porque es un poco largo, pero si quieres instanciar dinámicamente clases es algo asi

Código ActionScript :

 var myClass:Class = getDefinitionByName(className) as Class;
      var instance:Object = new myClass();
      return instance;


En este caso pierdes el strong type y tienes que irte a Object

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos



Ultima edición por solisarg el 06 Sep 2012 11:33 am, editado 1 vez

Argentina

firefox
Citar            
MensajeEscrito el 06 Sep 2012 11:29 am
OK, investigará más.

muchas gracias!! sois geniales! ;)

Por aran89

21 de clabLevel



 

chrome
Citar            
MensajeEscrito el 08 Sep 2012 02:55 pm
Primero que todo, es muy diferente cargar una imagen externa (o lo que sea) a instanciar un símbolo de la biblioteca.
En el caso que pones de los simbolos, yo lo haria así;

Código ActionScript :

 
var imActual:MovieClip = new Im1() as MovieClip;
addChild(imActual);


De este modo si necesitas cambiar la imagen, simplemente asignas a la misma variable.

Para cargar cosas externas, yo prefiero usar la libreria LoaderMax, es mucho mas flexible y te simplifica mucho el proceso de carga.

Por blashstar

4 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 09 Sep 2012 11:02 am
Muchas gracias por todo! Al final modifiqué la estructura del código y la cargué como me dijiste.
Un saludo!

Por aran89

21 de clabLevel



 

chrome

 

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