Comunidad de diseño web y desarrollo en internet online

[NOVATO] problema con swf cargado

Citar            
MensajeEscrito el 07 Abr 2010 03:15 pm
Hola a todos,
estoy dando el salto a AS3 y me encuentro con un problema que no se como resolver, me explico.

tengo una película principal, en la cual cargo un .swf externo, carga todo ok, no pongo todo el código, creo que sólo lo relevante, lo añado al stage con:

Código ActionScript :

   cargadorPeliculas=Sprite(cargaPelis.content);
   addChild(cargadorPeliculas);


Bien, ahora en cargadorPeliculas tengo el .swf cargado. En este .swf que cargo, creo un objeto nuevo

Código ActionScript :

          var map:Map = new Map();
          addChild(map);


Si intento hacer cualquier cosa con este objeto map (añadir un listener, recolocar...) , me da este error:

Código :

TypeError: Error #1009: No se puede acceder a una propiedad o a un método de una referencia a un objeto nulo.



Como tengo que dirigirme a él, es que aún estoy medio liado con esto, antes con el _root, _parent bla bla bla me aclaraba, ahora estoy muy perdido :(


Gracias de antemano por la ayuda.

Por torpedete

85 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 08 Abr 2010 03:12 pm
no lo entiendo bien...
el obejto map esta dentro de la pelicula Cargapelis o esta fuera de este?

si la clase map, esta fuera, debes fijarte si primero has incluido la misma, mediante el import, si las has definido y luego de esa forma podras acceder a todas las propiedades.

Espero te sirva.
Saludos

Por bubudrc

Claber

591 de clabLevel

1 tutorial

 

mayo 2006

msie8
Citar            
MensajeEscrito el 08 Abr 2010 03:18 pm
El objeto map está dentro de cargapelis, si.

He estado salseando y he conseguido hacerlo funcionar, aun sigo sin entender muy bien el porqué pero bueno, funciona.

Todo será acostumbrarse a hacer las cosas así :)


Gracias por la respuesta bubudrc ;)

Por torpedete

85 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 08 Abr 2010 04:32 pm
Torpedete, a ver si lo aclaro (o, al menos no lo lío). Creo que el problema es dónde defines tu variable. Sí, "map" es una VARIABLE (que hace referencia a un objeto de tipo Map)

Código ActionScript :

//No es lo mismo escribir en una función
funcion anadirMapa(){
    var map:Map = new Map(); 
    addChild(map);
}

Código ActionScript :

//que escribir en la película principal, NO dentro de una función
var map:Map = new Map(); 
addChild(map);

El motivo es que, cuando escribimos var nombre_variable:Clase DENTRO de una función, dicha variable no tiene NINGÚN valor fuera de ella, por eso

Código ActionScript :

//MAL
anadirMapa()
trace(map) //<----dará null
funcion anadirMapa(){
    var map:Map = new Map(); 
    addChild(map);
}

Código ActionScript :

//BIEN
var map:Map = new Map(); 
addChild(map);
trace(map) //<----dará [object Map]

Si la queremos dar valor dentro de una función deberíamos escribir

Código ActionScript :

//BIEN
//Simplemente la declaramos,
var map:Map;

anadirMapa()
trace(map) //<----dará [object Map]
funcion anadirMapa(){
    map = new Map();  //<--dentro de la función simplemente le damos valor
    addChild(map);
}

NOTA:He puesto los trace(map) en la línea principal, igual daría que lo hiciera dentro de una función (dentro de una función podremos usar todas las variables definidas dentro de la función, las variables que son argumentos y las variables definidas a nivel de frame

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 09 Abr 2010 08:38 am
Hola Eliseo2,

si esto lo tengo claro, se cual es la diferencia entre una variable y una variable local. Eso es igual en AS2 que en AS3. Mi problema es que no acabo de pillarle el truco a como referenciar las cosas cuando, como es este caso, tengo un objeto en el timeline de una peli que cargo en otra.

Cuando no me queda otra recurro a hacerle un cast con MovieClip(root).objetoQueCargaLaPeli, pero se que no es la mejor manera :)

De todas formas gracias por tu respuesta, siempre es de agradecer una ayuda :)

Por torpedete

85 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 09 Abr 2010 09:23 am
La "mejor manera" (si es que existe algo que se pueda decir así) es, en lugar de usar root, usar parent ó parent.parent o lo que corresponda. (según algunos autores "la mejor manera es la manera en que nos sentimos más cómodos")

La "conversión de cast" es NECESARIA en la mayoría de los casos si lo que vamos ha hacer es "aplicar un método". Me explico. El compilador de Flash, cuando se encuentra con "root" o con "parent" lo único que sabe es que es un objeto de tipo DisplayObjectcontainer Eso significa que sólo podremos usar las "propiedades" o los "métodos" de un objeto de dicho tipo.
En AS.3 TODOS los objetos salvo los que proceden de Object o de MovieClip son "clases selladas". ¿que quiere decir eso? (repito lo dicho en otro post)

Podemos escribir

Código ActionScript :

var mc:MovieClip=new MovieClip() 
mc.variable="Hola mundo" 

Pero no podemos escribir

Código ActionScript :

var sp:Sprite=new Sprite() 
sp.variable="Hola Mundo" //<---da error 

Por eso, para "acceder" a una variable (o un MC) hacemos la conversión a MovieClip. Técnicamente deberíamos hacer la "conversión de cast" al nombre de la Clase de documento de nuestro Flash, pero no se hace.
Igualmente lo tendríamos que hacer si queremos usar un método como gotoAndPlay -que sólo pertenece a MovieClip-

Por Eliseo2

710 de clabLevel



 

firefox
Citar            
MensajeEscrito el 09 Abr 2010 09:32 am
Muy buena explicación :)

Muchas gracias por ella Eliseo2.

Por torpedete

85 de clabLevel



Genero:Masculino  

firefox

 

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