Joseba,
el c�digo como tu lo has mandado funciona, el �nico problema que tengo es
que la ecuaci�n de Robert Penner solo funciona del fotograma 1 a delante y
no para atras.
Copio el c�digo que me mandaste:
<code>
stop();
Math.easeInOutCubic = function(t, b, c, d) {
t /= d/2;
if (t<1) {
return c/2*t*t*t+b;
}
t -= 2;
return c/2*(t*t*t+2)+b;
};
var local_mc = this.createEmptyMovieClip("control", 1000);
local_mc.onEnterFrame = function() {
};
MovieClip.prototype.adelante = function() {
this.b = 1;
this.c = this._totalframes;
this.d = 30;
this.t = 0;
this.onEnterFrame = this.__frameLoop;
};
MovieClip.prototype.atras = function() {
this.b = this._totalframes;
this.c = 1;
this.d = 30;
this.t = 0;
this.onEnterFrame = this.__frameLoop;
};
MovieClip.prototype.__frameLoop = function() {
trace(this.t);
if (this.t == this.d) {
this.onEnterFrame = null;
}
var a = Math.ceil(Math.easeInOutCubic(this.t, this.b, this.c, this.d));
this.gotoAndStop(a);
this.t++;
};
ba.onRelease = function() {
c.adelante();
};
bb.onRelease = function() {
c.atras();
};
</code>
El c�digo que yo utilize tambien funciona haciendole algunos arreglos a las
variables, para que todas sean locales.
Declarar la nueva instancia de MC en una variable local ha sido una gran
idea.
Creo que es mejor que el onEnterFrame est� asociado a otra instancia y no al
propio MC que hay que desplazar su cabezal ya que de esta manarea no es una
condici�n de la funci�n la de usar su propio onEnterFrame.
El m�todo apply () que pertenece a la clase function de objetos
predeterminados, lo que hace es aplicar la funci�n al objeto que pongamos
dentro de sus parentesis, de tal manera que cuando usamos this dentro de la
funcion, se concidera al objeto como this.
Pongo el c�digo que tambi�n funciona de esta manera:
<code>
stop();
Math.easeInOutCubic = function(t, b, c, d) {
t /= d/2;
if (t<1) {
return c/2*t*t*t+b;
}
t -= 2;
return c/2*(t*t*t+2)+b;
};
function adelante() {
var b = this._currentframe;
var c = this._totalframes;
var d = 30;
var t = 0;
var mc = this.createEmptyMovieClip("control", 1000);
mc.onEnterFrame = function() {
if (t<d) {
var a = Math.ceil(Math.easeInOutCubic(t, b, c, d));
trace(a)
t++;
this._parent.gotoAndStop(a);
} else {
this.removeMovieClip();
}
};
}
function atras() {
trace(a)
var b = this._currentframe;
var c = 1;
var d = 30;
var t = 0;
var mc = this.createEmptyMovieClip("control", 1000);
mc.onEnterFrame = function() {
if (t<d) {
var a = Math.ceil(Math.easeInOutCubic(t, b, c, d));
trace(a)
t++;
this._parent.gotoAndStop(a);
} else {
this.removeMovieClip();
}
};
}
ba.onRelease = function() {
adelante.apply(c);
};
bb.onRelease = function() {
atras.apply(c);
};
</code>
Bueno me queda pendiente el solucionar que las ecuaciones de R.P. funcionen
en sentido inverso tambi�n.
Que por que tanto empe�o en mover el cabezal y cambiar aceleraci�n de este
en un MC .
Por que me imagino que si me traigo render hechos de objetos en 3D
(animaci�n fotograma a fotograma) y luego muevo su l�nea de tiempo a
voluntad , afectando tambi�n su aceleraci�n se puede sacar mucho mas partido
a las animaciones.
� que pens�is ?
�Se os ocurre alguna mejora a esta misma idea.?
El incluir las funciones como m�todos de la clase MC al utilizar
"MovieClip.prototype.adelante=function(){ " algo" } que ventajas tiene en
comparaci�n a crear directamente las funciones y atraves del m�todo apply()
asign�rselas a las instancias?�?�?.
Si las funciones se declaran en _global � no se podr�a acceder a ellas de la
misma manera?.
Gracias Joseba por molestarte en contestar.
Xavi ahora me pondr� a mirar el e-mail que has mandado .....luego contesto.
Gracias a todos y que Papa Noel se porte bien con vosotros.
Rafael
www.fabricanet.com
----- Original Message -----
From: "Joseba Alonso" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Tuesday, December 16, 2003 2:44 PM
Subject: Re: [ASNativos] problemas con crear duplicados
> no entiendo porque a veces usas 'this' y otras no. Creo que tienes un
> problema al intentar formarte el ambito de las variables. O utilizas
'this'
> para todas o para ninguna. Porque eso puede llegar a darte problemas.
>
> Tampoco entiendo poque usas 'apply' al llamar la function. Creo que al
> llamarla asi y luego utilizar 'this' dentro de ellas estas cambiando el
> ambito de las variables.
>
> De todas maneras yo suelo usar una variable local para referirme a los
clips
> recien creados. Asi no me preocupo por su ambito ni su ruta. Algo asi:
>
> <code>
> var local_mc = this.createEmptyMovieClip("control", 1000);
> local_mc.onEnterFrame = function() {
> // ...etc
> }
> </code>
>
> quiz�s eso te saque del apuro.
>
> de todas maneras yo lo haria de la siguiente manera
>
> <code>
> // Colocado en el Prototype
> // Aqui quizas seria mejor hacer una subclase
> // de MovieClip y luego un registerClass
> // pero si no lo has hecho nunca quizas sea un
> // poco lioso aunque te evitara colision de variables
> MovieClip.prototype.adelante = function(){
> // Las variables se almacenan en el ambito del clip
> this.b = 1;
> this.c = this._totalframes;
> this.d = 30;
> this.t = 0;
> // Se asigna el evento al propio clip.
> // �Porque hacerlo en otro?
> this.onEnterFrame = this.__frameLoop;
> }
> // Igual que el anterior
> MovieClip.prototype.atras = function(){
> this.b = this._totalframes;
> this.c = 1
> this.d = 30;
> this.t = 0;
> this.onEnterFrame = this.__frameLoop;
> }
> // Las funciones de movimiento son iguales en ambos sentidos
> // por eso las 2 usan el mismo prototype
> MovieClip.prototype.__frameLoop = function(){
> // Primero comprobar si se ha acabado
> if(t==d){
> // se lanza un evento, propablemente
> // necesitas saber cuando ha acabado
> // Se pasa el fotograma actual como argumento
> // para determinar la direccion.
> // Esto se asigna a la instancia directamente
> this.onMoveEnd(this._currentframe);
> delete onEnterFrame
> }
> var a = Math.ceil(Math.easeInOutCubic(t, b, c, d));
> this.gotoAndStop(a);
> this.t++;
> }
> ba.onRelease = function() {
> clip_mc.onMoveEnd = function(){
> trace("Fin de movimiento");
> }
> clip_mc.adelante();
> };
> bb.onRelease = function() {
> clip_mc.onMoveEnd = function(){
> trace("Fin de movimiento");
> }
> clip_mc.atras();
> };
> </code>
>
>
> un saludo
>
> Joseba Alonso
> www.sidedev.net
>
>
> <!-------------------------------
> Lista ASNativos:
> subscripciones/desubscripciones
> http://www.sidedev.net/asnativos
> -------------------------------->
>
<!-------------------------------
Lista ASNativos:
subscripciones/desubscripciones
http://www.sidedev.net/asnativos
-------------------------------->