Comunidad de diseño web y desarrollo en internet online

¿Cómo acceder a los elementos de la escena?

Citar            
MensajeEscrito el 31 Ago 2010 10:34 am
Parece una tontería pero seguramente estoy haciendo algo mal. Uso dos archivos externos ".as" de actionscript 3, los cuales extienden los dos de un MovieClip. En uno he usado "addChild(objeto1)" y supongo que lo he añadido al escenario porque veo el objeto1 en la escena. El otro ".as" hace referencia a un movieclip que tengo en la librería y des de este archivo ".as" quiero acceder al objeto1 que he añadido des de la otra classe. He provado con "stage.objeto1" y con "_root.objeto1", también he provado con "MovieClip(stage.objeto1)" y simplemente he provado también con "objeto1"
pero me dice que el objeto no está declarado o que está nulo.

Grácias por vuestra ayuda.

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

msie8
Citar            
MensajeEscrito el 31 Ago 2010 01:45 pm
Haz un Document class que maneje las instancias y la relación entre clases asociadas a MovieClips, sino recibirás errores todo el tiempo por un tema de scope

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 31 Ago 2010 02:12 pm
Lo siento, no entiendo esto del scope. ¿Tendría que hacer una nueva classe para controlar las dos classes que ya tengo? ¿Cómo hago esto? ¿Tendríais algun ejemplo de cómo hacerlo?

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

msie8
Citar            
MensajeEscrito el 31 Ago 2010 02:30 pm
Se denomina Document Class, y sería como la clase del escenario, es decir ve cualquier cosa que haya en el stage, y desde allí haces addChild de lo que sea. Para crear un Document Class simplemente selecciona el escenario y en el panel de propiedades le pones el nombre de la clase que vas a usar. Si buscas en la ayuda por Document Class tienes mas referencias

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 31 Ago 2010 02:39 pm
Entonces mi problema debe ser otro, porqué ya tengo este Document Class creado y es aquí dónde hago el "addChild(objeto1)" pero después quiero acceder a este objeto1 des de la otra classe externa ".as" y no sé cómo acceder a él (objeto1).

Esperaré alguna otra solución más.
Grácias.

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

msie8
Citar            
MensajeEscrito el 31 Ago 2010 02:52 pm
BuenAS:

Si tienes las dos clases, por ejemplo ClaseA.as y ClaseB.as haz algo así en la clase documento (la clase principal, a la primera que llamas)

Código ActionScript :


var objeto_1:MovieClip = new Objeto();//o como se llame en tu biblioteca

var claseA:ClaseA = new ClaseA();

var claseB:ClaseB = new ClaseB(objeto_1);

claseA.addChild(objeto_1);
addChild(claseA);
addChild(claseB);



El constructor de tu ClaseB debería aceptar como parámetro un MovieClip que sería la referencia a objeto_1; así, en esta clase puedes hacer lo que estimes oportuno con objeto_1.

Si no quieres pasarle la referencia a través del constructor, en ClaseB te puedes crear una propiedad pública de tipo MovieClip, por ejemplo "objeto", y en lugar de hacer:

var claseB:ClaseB = new ClaseB(objeto_1);

haces:

var claseB:ClaseB = new ClaseB();
claseB.objeto = objeto_1;

Un saludo.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 31 Ago 2010 03:07 pm
Perdonadme, voy a ser más preciso. Tengo el Document Class llamado "Principal" y otra classe llamada "MovieButton". En la classe principal hago lo siguiente:

package
{
import ...

public class principal
{
public var a_viewport:Viewport3d;
(...)
public function principal():void
{
(...)
addChild(a_viewport);
}
}
}


Mis preguntas son:
¿Dónde me ha insertado addChild mi objeto "a_viewport"?
¿Cómo accedo a "a_viewport" desde la otra classe llamada "MovieButton"?

Grácias y perdonad mi mala explicación de mi problema.

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

msie8
Citar            
MensajeEscrito el 31 Ago 2010 03:22 pm
Lo segundo que no entiendes: scope
Esto se traduciría como "alcance" y tiene que ver con lo que las clases "ven". Si una clase secundaria tiene que acceder a otra pasando por root (ruta tipo root.clipA.clipB) el problema es de diseño. Si estás haciendo un banner todo bien, pero cualquier cosa un poco mas complejita te lleva a tediosos rastreos.
Dicho esto, un clip no puede acceeder al escenario hasta que no ha sido agregado al DisplayList, y eso genera un evento al que puedes agregar un listener. Lo ideal es que sea el Document class el que maneje el cotarro y no que los MC se hablen entre ellos

Jorge

Por solisarg

BOFH

13669 de clabLevel

4 tutoriales
5 articulos

Genero:Masculino   Bastard Operators From Hell Premio_Secretos

Argentina

firefox
Citar            
MensajeEscrito el 31 Ago 2010 03:29 pm
De acuerdo, muchas grácias.
Entonces tengo que plantearme el diseño nuevamente.

Grácias de nuevo.

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

msie8
Citar            
MensajeEscrito el 31 Ago 2010 03:32 pm
para no complicarte, añade la propiedad pública a_viewport a MovieButton y cuando la instancies , o sea, cuando hagas algo así:

var movieButton:Moviclip = new MovieButton();

movieButton.a_viewport = a_viewport;

Ahora, dentro de MovieButton puedes hacer "lo que quieras" con a_viewport; estás pasando una referencia de a_viewport a la clase MovieButton y NO TIENES QUE BUSCAR NADA MÁS :)

También es muy importante lo que comenta solisarg: NO LLAMES, utilices, etc. nada que no hayas "creado" antes. O sea, y esto ya es un comentario general: para utilizar una instancia, sus propiedades o métodos, PRIMERO hay que instanciarla :)

Un saludo.

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 31 Ago 2010 03:37 pm
...esto... ¿estás utilizando algún componente, clase, o similar de PV3D o Away3D? Si es el caso, para que existan los objetos hay que renderizar el visor donde estas mostrando la escena (esto último se realiza generalmente en la función controladora del evento ENTER_FRAME de tu MovieClip).

Por Lukánicos

Claber

468 de clabLevel



Genero:Masculino  

chrome
Citar            
MensajeEscrito el 31 Ago 2010 03:46 pm
Si, utilizo el PV3D, esto último lo tengo claro. Ya me atasqué con eso hace algunos días, pues ya lo solucioné. Es interesante el PV3D, me gusta mucho.

Saludos y hasta pronto.

Por CLAnonimo

Claber

600 de clabLevel

5 tutoriales
1 articulo

 

Este es un usuario anónimo genérico para las cuentas borradas o perdidas.

msie8

 

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