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

Responder a