Primero os paso el código y después explico el (los) problema (s).
Clase imagen
Código :
package { import flash.display.MovieClip; import flash.display.Loader; import flash.display.Bitmap; import flash.display.BitmapData; import flash.events.*; import flash.events.ProgressEvent; import flash.net.URLRequest; import flash.text.TextField; import flash.events.EventDispatcher; public class imagen extends MovieClip { private var _intMaxAncho:int; private var _intMaxAlto:int; private var _intMinAncho:int; private var _intMinAlto:int; private var _strURL:String; private var _intRatio:int; private var _cargadorInfo:TextField; private var _boolCapaMaster:Boolean; private var _strId:String; private var _intCapaDefecto:int; public var CAPA_MASTER:String = "capaMaster"; public var POSICION:String = "posicion"; private function activarEventos() : void { var cargador:Loader = new Loader(); cargador.contentLoaderInfo.addEventListener(Event.COMPLETE, cargaCompleta); cargador.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, cargando); cargador.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioError); var request:URLRequest = new URLRequest(_strURL); cargador.load(request); addChild(cargador); cargador.x = 0; } private function cargando (e:ProgressEvent) : void { var porcentaje:String = String(int(e.target.bytesLoaded)*100/int(e.target.bytesTotal)) + " %"; _cargadorInfo.text = porcentaje; _cargadorInfo.x = 0; _cargadorInfo.y = 0; addChild(_cargadorInfo); } private function cargaCompleta (e:Event) : void { removeChild(_cargadorInfo); _intMaxAncho = this.width; _intMaxAlto = this.height; _intMinAncho = this.width / 2; _intMinAlto = this.height / 2; this.width = _intMinAncho; this.height = _intMinAlto; var cargador:Loader = Loader(e.target.loader); var image:Bitmap = Bitmap(cargador.content); image.smoothing = true; image.cacheAsBitmap = true; dispatchEvent(new Event(POSICION)); } private function ioError (e:Event) : void { trace("IO Error en "+_strURL+". Compruebe la ruta del fichero"); } public function cambiarCapaMaster(_boolId:Boolean) : void { _boolCapaMaster = _boolId; dispatchEvent(new Event(CAPA_MASTER)); } public function set identificador (id:String) : void { _strId = id; } public function get id () : String { return _strId; } public function get ancho () : int { return _intMinAncho; } public function get alto () : int { return _intMinAlto; } public function get maxAncho () : int { return _intMaxAncho; } public function get maxAlto () : int { return _intMaxAlto; } public function get ratio () : int { return _intRatio; } public function get idCapaMaster () : Boolean { return _boolCapaMaster; } public function imagen (_strU:String = "007.jpg") : void { _boolCapaMaster = false; _strURL = _strU; _intRatio = 4; _cargadorInfo = new TextField(); _cargadorInfo.selectable = false; activarEventos(); } } }
Clase galeria
Código :
package { import imagen; import flash.display.MovieClip; import flash.events.*; import flash.events.MouseEvent; import flash.display.DisplayObject; public class galeria extends MovieClip { private const _intMaxImages:int = 28; private const _strDirImages:String = "img/"; private const _strPreIdInf:String = "00"; private const _strPreIdSup:String = "0"; private const _strExtension:String = ".jpg"; private const _nombreInterno:String = "imatge"; private const _intInicial:int = 1; private var _intAvance:int; private var _intPosGlobalX:int; private var _intPosGlobalY:int; private var _intSpaceX:int; private var _intSpaceY:int; private var _mcContenedorPrincipal:MovieClip; private var _mcControlador:MovieClip; private var _mc:*; private function capaMaster (e:Event) : void { if(e.target.idCapaMaster == true) { //_mcContenedorPrincipal.setChildIndex(DisplayObject(e.target),0); } else { //_mcContenedorPrincipal.setChildIndex(DisplayObject(e.target),1); } } private function posicionar (e:Event) : void { if(_intPosGlobalX != 0) { e.target.x = _intPosGlobalX + _intAvance; } else { e.target.x = _intPosGlobalX; } _intAvance = e.target.ancho + _intSpaceX; _intPosGlobalX += _intAvance; } private function activarContenedor () : void { _mcContenedorPrincipal.addEventListener(Event.ENTER_FRAME, onEnterFrame); function onEnterFrame (e:Event) : void { _mcContenedorPrincipal.x -= 1; } } private function rollOver (e:MouseEvent) : void { var _obj:* = e.target; _obj.cambiarCapaMaster(true); //_obj.width = _obj.maxAncho; //_obj.height = _obj.maxAlto; _obj.addEventListener(Event.ENTER_FRAME,onEnterFrame); function onEnterFrame (et:Event) : void { if(_obj.width < _obj.maxAncho) { _obj.width += _obj.ratio; } if(_obj.height < _obj.maxAlto) { _obj.height += _obj.ratio; } if(_obj.width >= _obj.maxAncho) { if(_obj.height >= _obj.maxAlto) { _obj.stop(); _obj.removeEventListener(Event.ENTER_FRAME,onEnterFrame); } } } } private function rollOut (e:MouseEvent) : void { e.target.width = e.target.ancho; e.target.height = e.target.alto; e.target.cambiarCapaMaster(false); } public function galeria (_rt:*) : void { _mc = _rt; _mcContenedorPrincipal = new MovieClip(); _mc.addChild(_mcContenedorPrincipal); _intPosGlobalX = 0; _intPosGlobalY = 0; _intAvance = 0; _intSpaceX = 5; _intSpaceY = 0; for(var i:int = _intInicial; i <= _intMaxImages; i++) { var _strRuta:String = ""; if(i < 10) { _strRuta = _strDirImages+_strPreIdInf+i+_strExtension; } else { _strRuta = _strDirImages+_strPreIdSup+i+_strExtension; } var imatge:imagen = new imagen(_strRuta); imatge.identificador = _strRuta; _mcContenedorPrincipal.addChild(imatge); imatge.addEventListener(imatge.CAPA_MASTER,capaMaster); imatge.addEventListener(imatge.POSICION,posicionar); imatge.addEventListener(MouseEvent.ROLL_OVER,rollOver); imatge.addEventListener(MouseEvent.ROLL_OUT,rollOut); } activarContenedor(); } } }
En el flash principal la llamada la hago de esta forma:
Código :
import galeria; var thumb:galeria = new galeria(this); stop();
Sólo tiene un único frame. En la biblioteca se encuentra un clip (MovieClip) vacío con el nombre clipContent, asociado a la clase imagen. Clasebase vacía.
El problema
Si paso el mouse por encima de la imagen (una sola), realiza el roll over y el roll out perfectamente, pero si voy pasando el mouse por las diferentes imágenes algunas si hacen el out, otras no, y hay bastante descontrol. He probado con Timer en de EnterFrame, pero no hay forma.
Otra cuestión es el tema de las capas, me interesa que la imagen que aumenta de tamaño pase a estar encima de todas ellas...
Otra pregunta más, antes, cuando tú creabas un clip de película te permitía seleccionar dónde estaba el punto x = 0 e y = 0, izquierda, centro superior, centro, etc.... ahora en as3 cómo puedo indicarselo? pq la animación me interesaría que se ampliara por el centro y no por la esquina superior izquierda.
Un abrazo, disculpar las molestas y gracias de antemano por la ayuda prestada.
[/code]