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