Una de las principales premisas del dise�o orientado a objectos es hacer
que los objectos sean responsables de s� mismos y de todo lo que tienen
que hacer. En este caso la distribuci�n de responsabilidades vendr�a a
ser algo as�:
- Localizador se encarga de ACEPTAR y EXPULSAR a un item. EXPULSA
al que hay en su interior (si lo hay) y le da la orden al que quiere
entrar para que entre. Todo esto se hace en el m�todo setActualItem(),
al que se le pasa como par�metro el item que debe entrar en el
localizador
- Un item, cuando recibe la orden, tiene que ser capaz por s�
solo de saber moverse. Tiene que saber d�nde ir en todo momento. Para
saber d�nde tiene que ir tenemos los m�todos MOSTRAR() y VOLVER() que
simplemente establecen los par�metros de origen y destino. Una vez sabe
d�nde tiene que ir debe moverse, esto se corresponde con el m�todo
reposition().
F�jate que lo primero que tienes que tener claro cuando quiras dise�ar o
ampliar una clase es saber en qui�n recae la responsabilidad.
Reformulando tu pregunta con los conceptos que acabo de introducir
ser�a: "C�mo hago para que el LOCALIZADOR me EXPULSE el item que hay en
su interior?". F�jate que en may�sculas est� el objeto responsable
(LOCALIZADOR) y la acci�n (EXPULSAR). Pues ahora que ya est� analizado y
la teor�a clara, pasemos a la pr�ctica.
Hemos quedado que el m�todo que nos permit�a EXPULSAR y ACEPTAR un item
era setActualItem(item) no? Donde item es el que debe entrar. Pero tu no
quieres que entre ninguno... Pues entonces le pasamos como referencia:
null.
En definitiva, la clase ya estaba preparada para lo que pides ;-) Una
posible implementaci�n:
1.) Crea un mc en el escenario y le dale nombre de instancia. En mi
caso 'aaa'. As�gnale este codigo en la linea de tiempo:
<code>
aaa.onRelease = function() {
// Supongo que la instancia del escenario
// de tu localizador se llama myLocalizador
myLocalizador.setActualItem(null);
}
</code>
Se podr�a hacer usando el m�todo getActualItem() de localizador y
despu�s llamar directamente a los m�todos mostrar() y volver(). Pero
esto se saltar�a una de las premisas que comentaba al principio: nos
estar�amos pasando por el forro las distribuci�n de responsabilidades.
Un truquillo para empezar con el dise�o orientado a objecto, y por esto
he puesto las may�sculas en distintos sitios, es asociar los sustantivos
con clases o objetos y los verbos con m�todos:
- LOCALIZADOR (sustantivo) --> clase Localizador
- el localizador debe EXPULSAR - ACEPTAR (verbos) --> m�todo
setActualItem()
- PUNTO para localizar (sustantivo) --> clase Item
|--> el 'para localizar' indica que hay una relaci�n con
LOCALIZADOR. Pero esto ya te lo dejo a ti
- un punto debe VOLVER a su sitio inicial o ser MOSTRADO en el
localizador (verbos) --> m�todos volver() y mostrar()
- un punto se debe poder REUBICAR (verbo) --> m�todo
reposition()
Con la distribuci�n de responsabilidades en mente ahora no te deber�a
costar entender el c�digo.
Por �ltimo, f�jate que una clase no es tan s�lo una agrupaci�n de
funciones y propiedades entorno un mismo concepto. Si llevas un poquito
m�s all� el dise�o te resultar� mucho m�s f�cil dise�ar. Una clase es
una entidad con responsabilidades propias y con capacidad para llevarlas
a cabo.
Saludos a todos
Xavi Beumala
http://www.code4net.com
> -----Mensaje original-----
> De: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED] En nombre de Ivan Rodriguez
> Enviado el: martes, 04 de noviembre de 2003 9:06
> Para: [EMAIL PROTECTED]
> Asunto: Re: [ASNativos] no mueve ningun MC :-(
>
>
> Xavi una cosita ... como haces para saber que solo hay un
> item activo?�? habria alguna forma mas facil de hacer esto
> ... es que se me ocurre algo ... hacer algo similar a lo
> tuyo, hacer un clase y vincularla a los MC de la pelicula, el
> caso es ... como saber si hay algun elemento en la posicion
> del localiazdor .... jeje diras ... que pesado este chaval
> :-( pos si jeje es que no me gusta hacer las cosas por hacer,
> me gustaria entenderlo bien :P jeje solo el tema de como
> hacer que vuelva un MC cuando se selecciona otro ... jeje solo es eso
>
> Muchas gracias
>
> ----- Original Message -----
> From: "Xavi Beumala" <[EMAIL PROTECTED]>
> To: <[EMAIL PROTECTED]>
> Sent: Tuesday, November 04, 2003 8:42 AM
> Subject: RE: [ASNativos] no mueve ningun MC :-(
>
>
> > Con distintos nombres de vinculaci�n y tantos object.registerClass
> > como items tengas:
> >
> > Object.registerClass("item1_mc",item);
> > Object.registerClass("item2_mc",item);
> > Object.registerClass("item3_mc",item);
> > Object.registerClass("item4_mc",item);
> >
> > Con esto tienes que tener en la biblioteca los mc's con nombre de
> > vinculaci�n item1_mc, item2_mc, item3_mc y item4_mc
> >
> > Saludos a todos
> > Xavi Beumala
> > http://www.code4net.com
> >
> > > -----Mensaje original-----
> > > De: [EMAIL PROTECTED]
> > > [mailto:[EMAIL PROTECTED] En nombre de Ivan
> Rodriguez
> > > Enviado el: martes, 04 de noviembre de 2003 8:38
> > > Para: [EMAIL PROTECTED]
> > > Asunto: Re: [ASNativos] no mueve ningun MC :-(
> > >
> > >
> > > Una preguntilla ......
> > >
> > > Puedo hacer diferentes MC y vincularlos como item_mc?�
> esque me dice
> > > que solo puede haber un identificador unico ... entonces
> como haria
> > > para que los demas MC heredesaen el onRelease ...
> haciendolos todos
> > > a mano?�
> > >
> > > ----- Original Message -----
> > > From: <[EMAIL PROTECTED]>
> > > To: <[EMAIL PROTECTED]>
> > > Sent: Monday, November 03, 2003 5:24 PM
> > > Subject: Re: [ASNativos] no mueve ningun MC :-(
> > >
> > >
> > > > Hola Ivan,
> > > > ahora mismo voy un poquito justo de tiempo, pero en
> cuanto tenga
> > > > un momento te explico detalladamente lo que no entiendas del
> > > c�digo que
> > > > te pas�.
> > > >
> > > > La verdad que sin ver exactamente el archivo me resulta dif�cil
> > > > decirte donde puede fallar, pero se me ocurren varias cosas:
> > > >
> > > > 1.) Tienes que darle nombre de vinculaci�n al mc que te
> > > represente
> > > > al localizador. En la libreria, boton derecho y vinculaci�n.
> > > > Tienes que ponerle como nombre 'Localizador'
> > > >
> > > > 2.) Para lo que son los items idem pero con nombre de
> > > > vinculaci�n
> > > 'item'.
> > > >
> > > > Esto corresponde con el primer par�metro del
> object.registerClass.
> > > >
> > > > A priori no veo nada m�s...
> > > >
> > > > > Estoy aun con las cosas de antes por que no me sale :-(
> > > > >
> > > > > Tengo el siguiente codigo:
> > > > >
> > > > > function Localizador() {
> > > > > this.addProperty("actualItem", this.getActualItem,
> > > setActualItem);
> > > > > this.__actualItem__ = null; this.init.call(this);
> > > > > }
> > > > >
> > > > > Localizador.prototype = new MovieClip();
> > > > >
> > > > > Localizador.prototype.init = function() {
> > > > > var i = int(this.provincias.length) ;
> > > > > while(i--) {
> > > > > trace(eval(this.provincias[i]).Localizador = this);
> > > > > }
> > > > > }
> > > > >
> > > > > Localizador.prototype.setActualItem = function(item) {
> > > > > this.__actualItem__.volver.call(this.__actualItem__);
> > > > > this.__actualItem__ = item;
> > > > > this.__actualItem__.mostrar.call(this.__actualItem__);
> > > > > }
> > > > >
> > > > > Localizador.prototype.getActualItem = function() { return
> > > > > this.__actualItem__; }
> > > > >
> > > > > function item() {
> > > > > this.initX = this._x;
> > > > > this.initY = this._y;
> > > > > }
> > > > >
> > > > > item.prototype = new MovieClip();
> > > > >
> > > > > item.prototype.mostrar = function() {
> > > > > delete this.onEnterFrame;
> > > > > this.endX = int(this.Localizador._x);
> > > > > this.endY = int(this.Lozalizador._y);
> > > > > this.dy = -(this._y - this.endY);
> > > > > this.dx = -(this._x - this.endX);
> > > > > this.y = this._y;
> > > > > this.x = this._x;
> > > > > this.reposition();
> > > > > }
> > > > >
> > > > > item.prototype.volver = function() {
> > > > > delete this.onEnterFrame;
> > > > >
> > > > > this.dy = -(this._y - this.initY);
> > > > > this.dx = -(this._x - this.initX);
> > > > >
> > > > > this.y = this._y;
> > > > > this.x = this._x;
> > > > > this.reposition();
> > > > > }
> > > > >
> > > > > item.prototype.onRelease = function() {
> > > > > this.Localizador.setActualItem(this);
> > > > > }
> > > > >
> > > > > item.prototype.reposition = function() { this.onEnterFrame =
> > > > > function() {
> > > > > this._x += (this.x - this._x)/4;
> > > > > this._y += (this.x - this._y)/4;
> > > > > }
> > > > > }
> > > > >
> > > > > Object.registerClass("localizador", Localizador);
> > > > > Object.registerClass("item", item);
> > > > >
> > > > > Nose muy bien lo que hace, elcaso es que tengo dos
> frames, en el
> > > > > primero tengo ese codigo, en el segundo e creado un
> componente
> > > > > llamado
> > > provincias
> > > > > el cual es un array que contiene los nombres de los
> moviclips, y
> > > > > tengo
> > > un
> > > > > movieclip creado, el caso es que no hace absolutamente
> > > nada :-( y no
> > > tengo
> > > > > ni la menor idea de por que :-( si alguien pudiera
> > > explicarme como
> > > > > hacer que funcione. .... esque me es bastante urgente :-(
> > > > >
> > > > > Muchas gracias
> > > > >
> > > > >
> > > > > 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
> > > > -------------------------------->
> > > >
> > >
> > > <!-------------------------------
> > > Lista ASNativos:
> > > subscripciones/desubscripciones
> > > http://www.sidedev.net/asnativos
> > > -------------------------------->
> > >
> >
> > <!-------------------------------
> > Lista ASNativos:
> > subscripciones/desubscripciones
> > http://www.sidedev.net/asnativos
> > -------------------------------->
> >
>
> <!-------------------------------
> Lista ASNativos:
> subscripciones/desubscripciones
> http://www.sidedev.net/asnativos
> -------------------------------->
>
<!-------------------------------
Lista ASNativos:
subscripciones/desubscripciones
http://www.sidedev.net/asnativos
-------------------------------->