Siento el doble post... Pero no me he acordado que la lista no aceptaba
archivos adjuntos. Pod�is encontrar los archivos en
http://www.code4net.com/localizador.rar

------------------------------------------------------------------------
-

Me he currado unas clases que espero que hagan lo que necesitas. Te
pongo el c�digo y mando un .fla para que veas el funcionamiento. 

<code>
/* --------------------------------------------
/*                LOCALIZADOR
/* --------------------------------------------
/* Clase que hereda de MC. Ser� el destino
/* para los distintos items que se considere
/* S�lo podr� tener un item activo
/* Se ha definido como componente.
/**********************************************/

function localizador () {
        // Propiedad definida en el panel de control
        // localizador es un componente y tiene
        // varios items asociados
        ////this.localizadorFor = new Array()
        
        this.addProperty ("actualItem", this.getActualItem,
this.setSetActualItem);
        
        // Propiedad privada que contiene una
        // referencia al item que est� posicionado
        // en localizador
        this.__actualItem__ = null;
        
        this.init.call(this);
}

localizador.prototype = new MovieClip();

localizador.prototype.init = function() {
        // Creamos una nueva referencia a este localizador 
        // en todos los items que tiene asociados a trav�s
        // del panel de propiedades
        var i = int(this.localizadorFor.length);
        while(i--) {
                eval(this.localizadorFor[i]).localizador = this;
        }
}

localizador.prototype.setActualItem = function(item) {
        // Al item que estaba activo lo hacemos volver
        // a su posici�n inicial
        this.__actualItem__.volver.call(this.__actualItem__);

        // seteamos el nuevo item activo
        this.__actualItem__ = item;     
        
        // Al nuevo item activo lo reposicionamos 
        this.__actualItem__.mostrar.call(this.__actualItem__);
}

localizador.prototype.getActualItem = function() {
        return this.__actualItem__;
}

/* --------------------------------------------
/*                  ITEM 
/* --------------------------------------------
/* Clasee que hereda de MovieClip.
/* Se encarga de saber d�nde se tiene que
/* posicionar en todo momento
/**********************************************/
function item() {
        // Almacenamos las coordenadas iniciales
        this.initX = this._x;
        this.initY = this._y;
        
        this.addProperty ("clickHandler", this.getClickHandler,
this.setClickHandler);
        
        //Par�metros ecuaciones ease Penner
        this.t = new Number();
        this.NFrames = new Number();
}

item.prototype = new MovieClip();

item.prototype.setClickHandler = function(handler) {
        this.__clickHandler__ = handler;
}

item.prototype.getClickHandler = function() {
        return this.__clickHandler__;
}
// Seteamos los par�metros 
// para que el item se mueva desde
// su posici�n inicial hasta la posici�n
// de su localizador
item.prototype.mostrar = function() {
        delete this.onEnterFrame;

        this.t = 0;
        this.NFrames = 15;
        this.endX = int(this.localizador._x);
        this.endY = int(this.localizador._y);

        this.dy = -(this._y - this.endY);
        this.dx = -(this._x - this.endX);
        this.y = this._y;
        this.x = this._x;
        this.reposition();
}

// Idem que mostrar() pero al rev�s
item.prototype.volver = function() {
        delete this.onEnterFrame;

        this.t = 0;
        this.NFrames = 15;
        this.dy = -(this._y - this.initY);
        this.dx = -(this._x - this.initX);
        
        this.y = this._y;
        this.x = this._x;
        this.reposition();
}


item.prototype.reposition = function() {
        this.onEnterFrame = effects.easeReposition;
}

item.prototype.onRelease = function() {
        trace("releasing " + this);
        this.localizador.setActualItem(this);
        eval(this.getClickHandler()).call(this);
}


/* --------------------------------------------
/*                  EFFECTS 
/* --------------------------------------------
/* Clase est�tica con m�todos para gestionar
/* las ecuaciones de movimiento.
/* NOTE: los distintos m�todos se invocan
/* en el �mbito de la instancia que los llama
/**********************************************/

function effects() {
}

effects.easeReposition = function() {
        if (this.t++ < this.NFrames) {
                this._y = Math.easeOutQuart (this.t, this.y, this.dy,
this.NFRAMES);
                this._x = Math.easeOutQuart (this.t, this.x, this.dx,
this.NFRAMES);
        } else {
                this.t = 0;
                delete this.onEnterFrame;
        }
}


// Ease Equation tomada de robertPenner
// www.robertPenner.com
Math.easeOutQuart = function (t, b, c, d) {
        return -c * ((t=t/d-1)*t*t*t - 1) + b;
};

// Registramos las clases
Object.registerClass("localizador_MC",localizador);
Object.registerClass("item_MC",item);
</code>


En el .fla ver�s que he definido un componente para 'localizador' con
una propiedad definida en el panel de propiedades. He intentado comentar
un poco el c�digo, pero cualquier cosa ya sabes.

Un peque�o detalle, en el t� c�digo nunca eliminas el onEnterFrame, eso
puede llevar a relentizar mucho lo que se est� ejecutando. Por otro
lado, el hecho de a�adir directamente funciones a los prototypes... A mi
personalmente no me gusta ya que no todos los mc's se van a comportar
igual (a priori).


Se nos han ocurrido dos soluciones. Una al estilo Macromedia y otra a
nuestro estilo ;-) La que hay implementada en el localizador.fla es a
nuestro estilo y en localizadorMM.fla est� al estilo MM. 

Por �ltimo comentar un peque�o detalle del c�digo que nos ha tenido a
Sixto y a mi entretenidos un ratito. Los items tienen definido en el
prototype el onRelease y hemos supuesto que ser�a interesante poder
sobreescribir el onRelease del prototype con una funci�n personal, pero
sin que se dejara de ejecutar el prototype.


Saludos a todos
Xavi Beumala
http://www.code4net.com

> -----Mensaje original-----
> De: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED] En nombre de Ivan Rodriguez
> Enviado el: viernes, 31 de octubre de 2003 11:45
> Para: [EMAIL PROTECTED]
> Asunto: [ASNativos] Cambiar posicion de MC
> 
> 
> Buenas, aqui estoy yo para hacer mi pregunta jejeje.
> 
> El cas es que estoy intentando hacer un localizador, y tengo
> un problema, e creado un protitpo para todos los MC de mi 
> pelicula y eso funciona muy bien:
> 
> MovieClip.prototype.mostrar = function() {
>  this.x = 55.5;
>  this.y = 208.0;
>  this.onEnterFrame = this.__frameLoop;
> }
> 
> MovieClip.prototype.__frameLoop = function() {
>  this._x += (x = (this.x - this._x)/4);
>  this._y += (y = (this.y - this._y)/4);
> }
> 
> Cuando pulso un boton con el siguiente codigo:
> 
> on(press) {
>  provincia2.mostrar();
> }
> 
> El MC provincia2 se posiciona en la posicion que le da el
> metodo mostrar(),el caso es que lo que quiero hacer es que 
> cuando se pulse sobre otro boton, antes de mostrar el MC en 
> esa posicion, el MC que este ocupando esa posicion vuelva a 
> la posicion inicial y un vez este en su posicion inicial se 
> muestre el MC seleccionado.
> 
> Espero haberme explicado ....
> 
> De antemano muchisimas gracias :-D
> 
> 
> Iv�n Rodriguez Espada
> _________________________
> ALAPLAYA.COM
> http://www.alaplaya.com
> [EMAIL PROTECTED]
> <!-------------------------------
> Lista ASNativos:
> subscripciones/desubscripciones http://www.sidedev.net/asnativos
> -------------------------------->
> 

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

Responder a