Hola!

LA SITUACI�N
=============

Estoy realizando unas pruebas con un fla con un �nico objeto mc llamado
"punto" vinculado a la clase Elastic (las de R. Penner). Todo en as2.

S�lo hay un fotograma que dice as�:

/////

ratonListener = new Object();
ratonListener.onMouseDown = function(){
        var inicialX = _root.punto._x;
        var inicialY = _root.punto._y;
        var finalX = _root._xmouse;
        var finalY = _root._ymouse;
        var distanciaX = _root._xmouse - inicialX;
        var distanciaY = _root._ymouse - inicialY;
        var t = 0;
        var cuadros = 50;
        _root.onEnterFrame = function(){
                if(t<cuadros){
                        _root.punto._x = Elastic.easeInOut(t, inicialX,
distanciaX, cuadros);
                        _root.punto._y = Elastic.easeInOut(t, inicialY,
distanciaY, cuadros);
                        t++;
                }else{
                        _root.punto._x = finalX;
                        _root.punto._y = finalY;
                        delete _root.onEnterFrame;
                }
        }
}
Mouse.addListener(ratonListener);
stop();

/////

Funciona a las mil maravillas. Cada vez que se oprime el bot�n del
rat�n, el punto se desplaza a la posici�n del puntero.
Y cambiando simplemente la clase Elastic por alguna de las otras de R.
Penner podemos visionar f�cilmente el resultado.


LO QUE QUERR�A
===============

Como dec�a antes, todo funciona.
Sin embargo, querr�a abstraer algo el c�digo en diferentes piezas que me
permitieran una reutilizaci�n posterior.
Para eso est�n las clases y la poo entre otras cosas.

Se me ocurre que podr�a primero intentar trocearlo aqu�, en el fla y
despu�s ya crear�a las clases necesarias.

El sistema podr�a ser que desde el fla controlo el evento de rat�n que
llama a un m�todo de la clase (del objeto mc que queremos controlar) y
luego tendr�a una clase que controlara todo el moviemiento del mc y otra
que hiciera todos los c�lculos del mc:

fla>objeto
         |
         MovEasing
                 |
                 Elastic

No parece nada del otro mundo.

As� troceo el c�digo anterior en el fla:


/////

ratonListener = new Object();
ratonListener.onMouseDown = LlamarMovimiento;
Mouse.addListener(ratonListener);

// Esto de abajo es lo que saco del literal de funci�n anterior.

function LlamarMovimiento(){
        var inicialX = _root.punto._x;
        var inicialY = _root.punto._y;
        var finalX = _root._xmouse;
        var finalY = _root._ymouse;
        var distanciaX = _root._xmouse - inicialX;
        var distanciaY = _root._ymouse - inicialY;
        var t = 0;
        var cuadros = 50;
        _root.onEnterFrame = function (){
                if(t<cuadros){
                        _root.punto._x = Elastic.easeInOut(t, inicialX,
distanciaX, cuadros);
                        _root.punto._y = Elastic.easeInOut(t, inicialY,
distanciaY, cuadros);
                        t++;
                }else{
                        _root.punto._x = finalX;
                        _root.punto._y = finalY;
                        delete _root.onEnterFrame;
                }
        }
}

/////

Bien, esto tira tambi�n.

Sin embargo esto de aqu� abajo ya no:

/////

ratonListener = new Object();
ratonListener.onMouseDown = LlamarMovimiento;
Mouse.addListener(ratonListener);

function LlamarMovimiento(){
        var inicialX = _root.punto._x;
        var inicialY = _root.punto._y;
        var finalX = _root._xmouse;
        var finalY = _root._ymouse;
        var distanciaX = _root._xmouse - inicialX;
        var distanciaY = _root._ymouse - inicialY;
        var t = 0;
        var cuadros = 50;
        _root.onEnterFrame = Mover(t, inicialX, inicialY, distanciaX,
distanciaY, cuadros);
}

function Mover(t, inicialX, inicialY, distanciaX, distanciaY, cuadros){
        if(t<cuadros){
                _root.punto._x = Elastic.easeInOut(t, inicialX,
distanciaX, cuadros);
                _root.punto._y = Elastic.easeInOut(t, inicialY,
distanciaY, cuadros);
                t++;
        }else{
                _root.punto._x = finalX;
                _root.punto._y = finalY;
                delete _root.onEnterFrame;
        }
}

/////


EL PROBLEMA
============

Bueno el problema se da en la segunda versi�n del c�digo troceado. M�s
exactamente en la funci�n Mover(...).
La cuesti�n es que funciona pero no cada enterFrame sino s�lo una vez.

�Por qu� necesito trocearlo as�?

Porque cuando haga las clases necesito que est� el c�digo dividido en
funciones separadas y evitar al m�ximo los literales de funciones en las
clases (porque no es posible pasarles par�metros a estas funciones en
las clases �?)

Le he dado todas las vueltas habidas y por haber. He hecho las clases,
creado el objeto correspondiente y llamado a los m�todos y el resultado
es el mismo.

Me imagino que el problema es que lo planteo mal y que esto falla con el
onEnterFrame y no en otras situaciones. Pero �c�mo puedo resolver casos
como el de los movimientos sin recurrir al onEnterFrame?

Saludos.

:��: croma2 :������������������������:
:    Carlos Terradillos Guti�rrez    :
::::::::::::::::::::::::::::::::::::::



 






<!-------------------------------
Lista ASNativos:
subscripciones/desubscripciones
http://www.sidedev.net/asnativos
-------------------------------->

Responder a