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
-------------------------------->