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

