Xavi,
una ves mas gracias, estas siendo tremendamente did�ctico para mi.
Ultima duda y no te molesto mas....
Esta es la funci�n que define al objeto:
_global.controlCabecera = function(contenedor) {
//trace("new Control " + contenedor);
this.ref_mc = contenedor.createEmptyMovieClip("controlCabecera_MC",999);
this.ref_mc.contenedor = contenedor;
this.ref_mc.controlador = this;
this.contenedor = contenedor;
}
Las 3 �ltimas lines me est�n volviendo loco.
//this.ref_mc.contenedor = contenedor; Aqu� me pierdo no se para que se
hace esto
//this.ref_mc.controlador = this; Esto no lo logro entender. Se supone que
'this' hace referencia a la instancia que crearemos de este objeto .Pero al
llamarla 'this.ref_mc.controlador' no la estamos situando dentro de la
instancia de MC "controlCabecera_MC"?�?��
//this.contenedor = contenedor; Y esto para que?�?�?
Se que sin ello no funciona pero la l�gica no la pillo.
Bueno un saludo
Rafael
----- Original Message -----
From: <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Wednesday, December 17, 2003 1:57 PM
Subject: Re: [ASNativos] problemas con crear duplicados
> Un evento o callback es una funci�n que se llama cuando sucede algo en
> concreto. En la clase controlCabecera el evento onStop se dispara cuando
> la cabecera llega al frame que se le haya indicado como tal. Y lo
> disparamos con la linea this.controlador.onStop.call(this.contenedor);
>
> Esto asume que hay una funci�n llamada onStop() definida, ya sea en la
> clase o ya sea en el objeto instanciado. Por qu� no hemos definido el
> evento como un m�todo de la clase? Pues... Porque cada instancia de la
> clase se comportar� de forma distinta no? Igual que definimos lo que
> queremos que pase cuando hacemos clic sobre un bot�n, pues tenemos que
> definir qu� hacer cuando la reproducci�n llegue a su fin (en algunos casos
> te interesar� hacer una reproducci�n c�clica, en otras te interesar�
> cargar otra movie, etc, etc,...)
>
> Lo que planteas de si lo que estamos haciendo es definir o aplicar...
> Pfff... Yo dir�a que lo estamos difiniendo y que lo aplicamos en la linea
> de c�digo que dec�a antes. Lo que no estamos haciendo en ning�n lado es
> declararlo ni indicar en el c�digo que habr� una funci�n llamada onStop.
> Simplemente la llamamos sin estar seguros de que exista. Pero esto tendr�a
> sentido en AS2.0 aqu� no lo veo un motivo para hacerlo...
>
> F�jate por ejemplo en el evento onPress u onRelease de un clip de
> pel�cula. Si los defines hacen lo que tu les digas, pero si no los defines
> no pasa nada... Pues en el caso de onStop pirula igual. Otra comparativa
> ser�a la clase loadVars o XML, donde cargas contenido con load y cuando
> este se ha cargada se dispara el onLoad. Tu lo puedes tener definido o
> no...
>
>
> Saludos
> Xavi
>
> > Xavi,
> > en el fla el evento est� de esta manera:
> > myControlCabecera.onStop = function() {
> > trace("Fin animaci�n");
> > };
> > Pero esta no es una manera de aplicar el evento mas que definirlo?�?�?
> > Adem�s no se tendr�a que definir como se define un m�todo o algo por el
> > estilo?�?�?
> > Se auto define al aplicarlo ?�?���?
> > saludos
> > Rafael
> >
> >
> >
> > ----- Original Message -----
> > From: <[EMAIL PROTECTED]>
> > To: <[EMAIL PROTECTED]>
> > Sent: Wednesday, December 17, 2003 12:34 PM
> > Subject: Re: [ASNativos] problemas con crear duplicados
> >
> >
> >> Holas,
> >> Creo que al mirar en la ayuda te has despistado. Call es un m�todo de
> >> Function (en la ayuda lo encontrar�s por function). En resumidas
cuentas
> >> es lo mismo que apply().
> >>
> >> El onStop() efectivamente es un evento y se lo tenemos que definir en
el
> >> objeto ControlCabecera que creemos. En el rar que se puede descargar
> >> viene
> >> un .fla de ejemplo y el onStop est� definido en el frame 1.
> >>
> >> Saludos
> >> Xavi
> >>
> >> > Disculpar que el mensaje anterior sali� volando sin que me diera
> >> tiempo
> > a
> >> > escribir.
> >> > Xavi gracias por dedicar tu tiempo a explicarme este tema.
> >> > Lo siento pero soy un poco cabez�n, vamos duro de azotea.
> >> > He estado mirando lo que hace 'call' y si no me equivoco se usa para
> >> > apuntar
> >> > a un fotograma sin tener que mandar el cabezal a ese sitio.
> >> > Entonces me surge la duda de como act�a aqu�:
> >> >
> >> > controlCabecera.prototype.__end = function() {
> >> > delete this.onEnterFrame;
> >> > this.controlador.onStop.call(this.contenedor);
> >> > }
> >> > La otra duda es con respeco al 'onStop' que no se donde sale, supongo
> > que
> >> > es
> >> > un evento pero no lo hemos definido y no se cuando se ejecuta.
> >> >
> >> > gracias de nuevo
> >> > rafael
> >> >
> >> > ----- Original Message -----
> >> > From: <[EMAIL PROTECTED]>
> >> > To: <[EMAIL PROTECTED]>
> >> > Sent: Wednesday, December 17, 2003 10:34 AM
> >> > Subject: Re: [ASNativos] problemas con crear duplicados
> >> >
> >> >
> >> >> Hola a todos,
> >> >>
> >> >> >>Xavi,
> >> >> >>me estas siendo de gran ayuda, he adaptado tu c�digo a la
> >> >> >>base de mi idea original. La base por que por ahora mueve el
> >> >> >>cabezal fotograma a fotograma. Una ves que me expliques un
> >> >> >>par de detalles implementar� las ecuaciones de Robert Penner
> >> >> >>para cambiar la aceleraci�n de reproducci�n. Bueno este es el
> >> >> >>c�digo con dos m�todos , avanzar y retroceder: <code>
> >> >> >>
> >> >> >>_global.controlCabecera = function(contenedor) {
> >> >> >> this.ref_mc =
> >> >> >>contenedor.createEmptyMovieClip("controlCabecera_MC",999);
> >> >> >> this.ref_mc.contenedor = contenedor;
> >> >> >> this.ref_mc.controlador = this;
> >> >> >> this.contenedor = contenedor;
> >> >> >>}
> >> >> >>
> >> >> >>controlCabecera.prototype = new Object();
> >> >> >>
> >> >> >>controlCabecera.prototype.retroceder = function() {
> >> >> >>this.ref_mc.onEnterFrame =function(){ var current =
> >> >> >>parseInt(this.contenedor._currentframe);
> >> >> >> if(current>1) {
> >> >> >> this.contenedor.prevFrame();
> >> >> >> }else{
> >> >> >> this.controlador.__end.call(this);
> >> >> >> }
> >> >> >>}
> >> >> >>}
> >> >> >>
> >> >> >>controlCabecera.prototype.avanzar = function() {
> >> >> >> var total = parseInt(this.contenedor._totalframes);
> >> >> >> this.ref_mc.onEnterFrame =function(){
> >> >> >> var current = parseInt(this.contenedor._currentframe);
> >> >> >> if(current<total) {
> >> >> >> this.contenedor.nextFrame();
> >> >> >> }else{
> >> >> >> this.controlador.__end.call(this);//aqu� llamas al m�todo
> >> >> >>que detiene el onEnterFRame, pero para que utilizas el
> >> >> >>'.call(this)' } } }
> >> >> >>
> >> >> >>controlCabecera.prototype.__end = function() {
> >> >> >> delete this.onEnterFrame;
> >> >> >>this.controlador.onStop.call(this.contenedor);//aqu� tampoco
> >> >> >>entiendo por que pones esta frace, se supone que si detienes
> >> >> >>el onEnterFrame el cabezal tambi�n se detiene //� no?. }
> >> >> >>
> >> >> >>
> >> >> >></code>
> >> >> >>Me parece que esta forma de manejar el c�digo es la mas
> >> >> >>coherente , 1� declaramos una funci�n en global para acceder
> >> >> >>a ella de cualquier parte, luego la prototipamos como un
> >> >> >>nuevo objeto (controlCabecera.prototype = new
> >> >> >>Object();) y a partir de este momento controlCabecera es un
> >> >> >>objeto al cual le podemos a�adir m�todos, como avanzar() y
> >> >> >>retroceder().
> >> >>
> >> >>
> >> >> Exactamente, esa es la idea de lo programaci�n orientada a objetos:
> >> >> encapsular a cada objeto para que tenga un funcionamiento
> >> independiente
> >> >> del resto de objetos pero que tenga sistemas para comunicarse con el
> >> >> resto
> >> >> del mundo. Y siendo puritanos controlCabecera, desde el momento que
> >> >> 'prototipamos' se convierte en una clase que podemos instanciar.
Esas
> >> >> instancias ser�n ya los objetos :P
> >> >>
> >> >>
> >> >> >>Tengo otra duda , � no ser�a mas censillo
> >> >> >>declarar el 'delete this.onEnterFrame;' dentro de los m�todos
> >> >> >>avanzar y retroceder. En este caso � para que otro m�todo ?.
> >> >>
> >> >>
> >> >> Esta pregunta y los comentarios que has puesto en el c�digo son todo
> >> lo
> >> >> mismo... Primero comento el razonamiento que sigo a la hora de
> >> decidir
> >> >> qu�
> >> >> m�todos tienen mis clases y en este caso pq met� un m�todo encargado
> >> de
> >> >> hacer el delete this.onEnterFrame. F�jate que, si no existiera dicho
> >> >> m�todo, tanto en el m�todo avanzar como retroceder tendr�a que haber
> >> un
> >> >> delte this.onEnterFrame (y el callback a onStop). Cree un m�todo
> >> nuevo
> >> >> para no duplicar c�digo y asignar funcionalidades de forma m�s
> >> >> espec�fica.
> >> >> F�jate que de esta forma podr�amos a�adir otros m�todos distintos a
> >> >> avanzar o retroceder como gotoEnd o gotoHome, etc. Si no
utiliz�ramos
> > el
> >> >> m�todo __end a�n estar�amos duplicando m�s c�digo. Por otra parte
eso
> >> >> facilita el mantenimiento. Si quisi�ramos a�adir esta clase, al
tener
> >> >> repartidas las responsabilidades en distintos m�todos, ser�a
> >> f�cilmente
> >> >> adaptable permitiendo herencia.
> >> >>
> >> >> Ahora lo otro, pq utilizo call y pq utilizo this. F�jate que la
clase
> > es
> >> >> un Object y que como tal no tiene definidos ni onEnterFrame ni
> >> ninguna
> >> >> mandanga relacionada con los clips de pel�cula. Para solventar eso
al
> >> >> instanciar la clase, esta crea un clip de pel�cula donde se defina
> >> >> (par�metro del constructor). En ese punto el objeto conrolCabecera
> >> >> simplmente almacena una referencia a ese clip de pel�cula y nos
sirve
> >> >> para
> >> >> interactuar con �l.
> >> >>
> >> >> De esta forma los m�todos que tiene controlCabecera se tienen que
> >> >> aplicar
> >> >> sobre el clip de pel�cula y no sobre el Object en s�. El clip de
> >> >> pel�cula
> >> >> contiene un referencia (almacenada en la var 'controlador') al
objeto
> >> >> ControlCabecera.
> >> >>
> >> >> Por todo este rollo el que nos permite controlar realmente el
> > movimiento
> >> >> es el clip de pel�cula y no el Object. Al igual que no tiene sentido
> >> >> aplicar un onterFrame a un Object, tampoco tiene sentido aplicar un
> >> >> delete
> >> >> this.onEnterFrame a ese mismo Object. Para solucionar esa
> >> incoherencia,
> >> >> el
> >> >> clip de pel�cula (en el que s� tiene sentido el onEnterFrame)
ejecuta
> >> >> los
> >> >> m�todos de ControlCabecera como si fueran suyos sin que lo sean (con
> >> el
> >> >> call()). Esto nos permite encapsular o hacer totalmente transparente
> >> el
> >> >> uso de la clase sin tenernos que preocupar de si hay por ah� un MC
> >> >> escondido o no.
> >> >>
> >> >> Por todo esto, cuando queremos borrar el onEnterFrame tenemos que
> > hacer:
> >> >>
> >> >> <code>
> >> >> this.controlador.__end.call(this);
> >> >> </code>
> >> >>
> >> >> Esta linea de c�digo se est� ejecutando en el �mbito del movie Clip
> >> >> (this
> >> >> apunta al MC y no al Object). Con this.controlador accedo al objeto.
> >> Y
> >> >> utilizo call para que esa llamada se ejecute en el �mbito del MC y
no
> >> >> del
> >> >> object (sin� delete this.onEnterFrame carece de sentido).
> >> >>
> >> >>
> >> >> >>Bueno espero no aburriros demasiado con este tema pero creo
> >> >> >>que mis dudas pueden ser �tiles a mas de uno. Gracias de ante
> >> >> >>mano a toda la comunidad de esta lista, de la cual estoy
> >> >> >>orgulloso de pertenecer.
> >> >>
> >> >>
> >> >> Pues eso, que espero que te haya podido aclarar algo un poquito...
> >> >>
> >> >> Saludos a todos
> >> >> Xavi Beumala
> >> >>
> >> >> <!-------------------------------
> >> >> Lista ASNativos:
> >> >> subscripciones/desubscripciones
> >> >> http://www.sidedev.net/asnativos
> >> >> -------------------------------->
> >> >>
> >> >>
> >> >
> >> >
> >> > <!-------------------------------
> >> > Lista ASNativos:
> >> > subscripciones/desubscripciones
> >> > http://www.sidedev.net/asnativos
> >> > -------------------------------->
> >> >
> >>
> >> <!-------------------------------
> >> Lista ASNativos:
> >> subscripciones/desubscripciones
> >> http://www.sidedev.net/asnativos
> >> -------------------------------->
> >>
> >>
> >
> >
> > <!-------------------------------
> > Lista ASNativos:
> > subscripciones/desubscripciones
> > http://www.sidedev.net/asnativos
> > -------------------------------->
> >
>
> <!-------------------------------
> Lista ASNativos:
> subscripciones/desubscripciones
> http://www.sidedev.net/asnativos
> -------------------------------->
>
>
<!-------------------------------
Lista ASNativos:
subscripciones/desubscripciones
http://www.sidedev.net/asnativos
-------------------------------->