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