He conseguido realizar una clase que me genere la galería a través de un XML, que tenga el movimiento que quiero , todo correcto.
Antes usaba la siguiente función para crear un reflejo :
Código as3:
Ver original
function Reflejo(mc) { //Creo un objeto Bitmap en el que esté dibujado el clip que paso como parámetro //Le doy la vuelta indicando que scaleY = -1; trace("reflejo1"); trace(mc.width); if (mc.width>2880||mc.height>2880) { throw new Error("La imagen supera los 2880 pixeles permitidos para BitmapData"); return; } var bmd:BitmapData=new BitmapData(mc.width,mc.height); trace("reflejo2"); bmd.draw(mc); trace("reflejo3"); var bm:Bitmap=new Bitmap(bmd); bm.x=0; bm.scaleY=-1; bm.y=mc.height*2; bm.cacheAsBitmap=true; trace("reflejo4"); //Creo un degradado para la mascara por medio de createGradientBox. Jugando con los valores //de alphas y ratios se puede ajustar la longitud del reflejo. var mascara=new Sprite ; var tiporelleno:String=GradientType.LINEAR; var colores:Array=[0x00000000,0x00000000]; var alphas:Array=[0.5,0]; var ratios:Array=[0,180]; var matr:Matrix=new Matrix ; matr.createGradientBox(mc.width,mc.height,Math.PI/2,0,0); var spreadMethod:String=SpreadMethod.PAD; mascara.graphics.beginGradientFill(tiporelleno,colores,alphas,ratios,matr,spreadMethod); mascara.graphics.drawRect(0,0,mc.width,mc.height); mascara.x=0; mascara.y=mc.height; mascara.rotation; mascara.cacheAsBitmap=true; //Aplico la máscara a la copia del clip, y añado ambos al clip bm.mask=mascara; mc.addChild(bm); mc.addChild(mascara); var Anchobm:Number=new Number ; var anchomascara:Number=new Number ; Anchobm=bm.height; anchomascara=mascara.height; trace(" ancho bm " +Anchobm +"Ancho mascara"+ anchomascara); }
Con una galeria generada desde el Flash no tenian ningun problema, ahora en cambio , me realiza el reflejo totalmente en blanco , ademas de ir escalando la y por cada imagen .
Entonces hice la prueba con esta otra :
Código as3:
Ver original
function mirror(target:MovieClip, maskColor:String):void { /*Este código copia el MovieClip al que queremos aplicar el reflejo y lo posiciona bajo el y lo invierte*/ var targetClass:Class = Object(target).constructor; var targetCopy:MovieClip = new targetClass(); targetCopy.y = target.y + target.height; targetCopy.x = target.x; targetCopy.scaleY = -1; targetCopy.width = target.width; targetCopy.height = target.height; addChild(targetCopy); /*Este código construye un Gradient que será aplicado a la copia del MovieClip para que simule el reflejo*/ var msk:MovieClip = new MovieClip(); var fillType:String = GradientType.LINEAR; var colors:Array = [maskColor, maskColor]; var alphas:Array = [0, 1]; var ratios:Array = [0, 255]; var matrix:Matrix = new Matrix(); matrix.createGradientBox(target.width / 2, target.height / 2, Math.PI / 2, 0, 0); var spreadMethod:String = SpreadMethod.PAD; msk.graphics.beginGradientFill(fillType, colors, alphas, ratios, matrix, spreadMethod); msk.graphics.drawRect(0, 0, target.width, target.height); addChild(msk); msk.x = targetCopy.x - targetCopy.width / 2; msk.y = targetCopy.y - targetCopy.height / 2; }
Con esto consigo que por lo menos, la forma del reflejo sea el de la galeria creada, pero no hay reflejo solo el recuadro del mismo tamañao que el moviclip escaldo de y a -1 y totalmente en blanco.Creo que no detecta los thumbnails, no puedo hacer el reflejo del Loader, y si lo hago del mc donde añado el thumbnail(loader) sale en blanco.
Mi lógica me dice que el reflejo del mc está vacio por que no detecta los thumbnails, pero si los veo en pantalla, porque no es capaz de realizar el reflejo ?
Alguien sabe por donde podría tirar ??
muchas gracias de antemano