Hola Carlos, 0-Me alegra que a alguien le resulte interesante, y elegante no digamos... gracias... 1-He actualizado la clase, porque repasando la implementación de Singleton de Colin Moock, caigo en la cuenta, el constructor tiene que ser un método privado... 2-Ahora tengo un problema para utilizarla en vez de mis antiguos prototipos... y es que antes cargaba mis protos en el primer swf y luego podía utilizarlos sin recargarlos en cualquier swf que cargara, ahora sin embargo tengo que importar la clase en cada swf en la que quiera utilizarlo, lo que aumenta los Kbs, aunque no demasiado, porque solo utilizo esta clase... 3-No sé a qué te refieres con lo de la concordancia de tipos, -sé qué son los tipos de variables y tal, pero aún no comprendo como el compilador me dejó colar la clase... (han sido tantos esfuerzos otras veces, con otras ideas, que cuando hice esto de un tirón casi me caigo de espaldas...) 4-Supongo que para mover y alinear las cosas desde otra perspectiva que la que flash usa (TL),mejor hacer otra clase, aunque tal vez pasándole los valores de alineación al constructor de la clase, y así modificando la alineación del Stage..., en fin que es un poco lioso tener en cuenta el punto de registro, y para casos específicos puedes usar los valores de offset. Pero le echaré un vistazo. 5-Cierto, me olvidé de los TextFields y los Buttons... aunque la verdad me lío con los instanceOf y TypeOf... 6-Más que ampliar la clase haría otra / otras que utilizaran esta.
Por cierto, si alguien tiene por ahí un buen ejemplo de un 'distribuidor espacial' o como lo querais llamar, sería un placer verlo. PD: Si alguno necesita una textura 3D o un gráfico, o un modelo, mi amigo manuel puso su web hace un par de meses con descargas gratis (25 diarias), y muy, muy buenas: http://www.psicosonic.com Son gratis, así que no me acuseis de hacer publicidad... además es un portal con excelentes recursos. Y anuncio, en una semana cuelgo una demo de mi gestor de contenidos en flash... (codigo abierto, descarga gratuita, versión MUY pre-alpha...) Estaré sin internet unos días. Pasadlo bien y no trabajeis mucho... > Hola, Sergio: > > Muy buena tu clase, y muy elegante. La idea de los márgenes en la > alineación me ha parecido excelente y muy original. Veo algún problema de > concordancia de tipos cuando quieres alinear un mc al Stage, ya que este > no es ni hereda de MovieClip, pero se puede arreglar fácil. > > Veo mayor problema, sin embargo, cuando el clip que quieres alinear no > tiene su punto de registro en la esquina superior izquierda, sino, por > ejemplo, en el centro. Esto se podría solucionar recurriendo al método > GetBounds de la clase MovieClip, aunque complica un poco más los cálculos. > > Otra posible ampliación que sugeriría es que se pudiesen alinear no > solamente mcs, sino también botones y campos de texto. Esto lo > solucionarías aceptando como primer parámetro un tipo Object, y luego > examinando si ese objeto es una instancia de MovieClip, Button o > TextField; si no es de ninguna de esas clases, sales de la función, y si > lo es, procedes como ahora. ¿Dificultades? Que si vas a tener en cuenta > que el punto de registro, este puede estar en cualquier sitio del objeto a > alinear si es un MovieClip, en la esquina superior izquierda si es un > TextField, y en el caso de un Button... pues no se me ocurre ninguna > manera de averiguarlo, oyes. > > También podrías aceptar como primer parámetro un array de mc's (u otros > objetos), de modo que lo vayas recorriendo y apliques a cada uno el código > de alineación, para alinearlos todos de golpe. Esto sería muy interesante > de cara a ampliar la clase en un futuro para que no sólo pueda alinear > varios objetos, sino también distribuirlos, o espaciarlos, al estilo del > panel Alinear del Flash, aunque a lo mejor nos estaríamos metiendo en > palabras mayores... > > Un saludo, > Carlos > > > > > > Mi primera clase en AS 2, -casi 3 años sin comprender a mi > > compilador... > > Es una pequeña utilidad para alinear cosas... y registrar las > > alineaciones a Stage.onResize > > Seguro que hay cosas mejores por ahí, pero esta es sencilla... > > Saludos!!! > > http://usuarios.arsystel.com/sergiodf/as/sdf/AlignManager.as > > /** > > * The class gives an easy interface to align movieclips on > > Stage or to other movieclips, > > * and register -or not- these alignments to the > > Stage.onResize event. > > * @usage import sdf.AlignManager > > * var aligner=AlignManager.getInstance(); > > * aligner._align(mc,Stage,'R',2,0,true); > > * @author Sergio Daroca Fernández (funlab) > > * @version 1.0 > > * @since 20-01-2007 > > */ > > class sdf.AlignManager > > { > > public var _alignments : Array = new Array (); > > private static var _instance : AlignManager = null; > > public function AlignManager () > > { > > Stage.scaleMode = "noscale"; > > Stage.align = "TL"; > > Stage.addListener (this); > > } > > /** > > * Used to instantiate the class, returns a 'singleton' class > > instance. > > * > > * @usage var aligner=sdf.AlignManager.getInstance(); > > * @return AlignManager instance > > */ > > public static function getInstance () : AlignManager > > { > > if (_instance == null) > > { > > AlignManager._instance = new AlignManager (); > > } > > return AlignManager._instance; > > } > > /** > > * Aligns a movieclip to Stage or other scope (MovieClip), > > and registers (or not) the alignment to Stage onResize event. > > * Uses 'T' 'M' 'B' and 'L' 'C' 'R' strings to set the > > alignment (case unsensitive). > > * ('Top, Middle, Bottom' for vertical alignment) > > * ('Left, Center, Right' for horizontal alignment) > > * @usage > > sdf.AlignManager.getInstance()._align(mc,Stage,'MR',6,0,true); > > * This will instantiate the class, align mc to the Stage > > vertical center > > * and to the right of the stage with a 6 pixels margin, and > > trigger the align action > > * anytime the Stage is resized > > * @param mc MovieClip to be aligned > > * @param scope Alignment's scope (Stage or MovieClip) > > * @param alignTo One of: 'T' 'M' 'B', and/or one of: 'L' > > 'C' 'R' > > * @param xmargin Horizontal offset/margin for alignment > > * @param ymargin Vertical offset/margin for alignment > > * @param register Wether to register the alignment for > > Stage.onResize method > > * @return Void > > */ > > public function _align (mc : MovieClip, scope : MovieClip, > > alignTo : String, xmargin : Number, ymargin : Number, register > > : Boolean) : Void > > { > > var xmargin = isNaN (xmargin) ? 0 : xmargin; > > var ymargin = isNaN (ymargin) ? 0 : ymargin; > > switch (scope) > > { > > case Stage : > > var _topHeight = Stage.height; > > var _topWidth = Stage.width; > > break; > > default : > > var _topHeight = scope._height; > > var _topWidth = scope._width; > > break; > > } > > var l = alignTo.length; > > while ( -- l > - 1) > > { > > var _alignTo = alignTo.charAt (l); > > switch (_alignTo) > > { > > case 'T' : > > case 't' : > > mc._y = Math.floor(0 + ymargin); > > break; > > case 'M' : > > case 'm' : > > mc._y = Math.floor(_topHeight / 2 - mc._height / 2 + ymargin); > > break; > > case 'B' : > > case 'b' : > > mc._y = Math.floor((_topHeight - mc._height) - ymargin); > > break; > > case 'L' : > > case 'l' : > > mc._x = Math.floor(0 + xmargin); > > break; > > case 'C' : > > case 'c' : > > mc._x = Math.floor(_topWidth / 2 - mc._width / 2 + xmargin); > > break; > > case 'R' : > > case 'r' : > > mc._x = Math.floor((_topWidth - mc._width) - xmargin); > > break; > > } > > } > > if (register) > > { > > var alignment : Object = {mc:mc, scope:scope, > > alignTo:alignTo, xmargin:xmargin, ymargin:ymargin}; > > _alignments.push(alignment); > > } > > } > > /** > > * Event Listener Method for Stage.onResize: > > * Alingments that have been registered will trigger on > > Stage.onResize event through this function > > * > > */ > > private function onResize () > > { > > var l = _alignments.length; > > while ( -- l > - 1) > > { > > var _args=_alignments[l]; > > var _args_array=new Array(); > > for(var a in _args) _args_array.push(_args[a]); > > _align > > (_args_array[0],_args_array[1],_args_array[2],_args_array[3],_args_array[4],false); > > } > > } > > } > > > > Envoyez vos cartes de voeux depuis www.laposte.net > > Elles seront ensuite distribuées par le facteur : pratique et malin ! > > > > > > ----------------------------------------------------- > > ASNativos > > www.5dms.com > > subscripciones/desubscripciones > > http://asnativos.5dms.com > > ----------------------------------------------------- > > > > > ----------------------------------------------------- > ASNativos > www.5dms.com > subscripciones/desubscripciones > http://asnativos.5dms.com > ----------------------------------------------------- Envoyez vos cartes de voeux depuis www.laposte.net Elles seront ensuite distribuées par le facteur : pratique et malin ! ----------------------------------------------------- ASNativos www.5dms.com subscripciones/desubscripciones http://asnativos.5dms.com -----------------------------------------------------

