Salve a tuti,
Sto utilizzando la classe mirror e tutto funge ok tranne che ovviamente sugli mc che contengono animazioni all'interno o "parti mobili", pur avendo letto diversi 3d in materia non sono riuscito a risolvere il problema...
Qualcuno e' in grado di darmi delucidazioni o indicarmi una via...
Nello specifico ho un mc all'interno del quale ce' un livello maskera su 4 immagini differenti che vengono richiamate dall'esterno...
questo e' il contenuto della mia classe mirror.as:
Codice PHP:
import flash.display.BitmapData;
import flash.geom.Matrix;
class Mirror {
private var __t:MovieClip;
private var __d:Number;
private var __o:Number;
private var __u:Number;
private var __m:MovieClip;
private var __b:MovieClip;
private var __g:MovieClip;
private var __v:Array;
function Mirror (t:MovieClip, d:Number, o:Number, u:Number) {
__t = t;
__d = d;
__o = o;
__u = u;
__m = __t._parent.createEmptyMovieClip(__getname__(), __t._parent.getNextHighestDepth());
__init__ ();
}
private function __init__ () {
__b = __m.createEmptyMovieClip("bitmap", 1);
__g = __m.createEmptyMovieClip("gradient", 2);
__gradientshape__(__g, __t._width, __t._height*(__u/100), __o);
__b.cacheAsBitmap = __g.cacheAsBitmap = true;
__b.setMask(__g);
__v = [];
__v.push(new BitmapData(__t._width, __t._height, true, 0));
__v.push(new Matrix());
__v.push(__t.getRect(__t));
__v[1].translate(-__v[2].xMin, -(__t._height+__v[2].yMin));
__v[1].scale(1, -1);
__v[0].draw(__t, __v[1]);
__b.attachBitmap(__v[0], 1);
__b._x = __g._x = __v[2].xMin;
__b._y = __g._y = __v[2].yMin;
__m._x = __t._x;
__m._y = __t._y+__t._height+__d;
}
private function __gradientshape__ (t:MovieClip, w:Number, h:Number, a:Number) {
var matr:Matrix = new Matrix();
matr.createGradientBox(w, h, 90/180*Math.PI, 0, 0);
t.beginGradientFill("linear", [0, 0], [a, 0], [0, 255], matr, "pad");
t.lineTo(w, 0);
t.lineTo(w, h);
t.lineTo(0, h);
t.lineTo(0, 0);
t.endFill();
}
private function __getname__ ():String {
var r:String = "";
var s:String = "abcdefghkijlmnopqrstuvwxyz0123456789ABCDEFGHKIJLMNOPQRSTUVWXYZ";
var a:Array = s.split("");
for(var i:Number = 0; i < 6; i++){
var n:Number = Math.floor(Math.random()*a.length);
r+=a[n];
}
return r;
}
public function refresh () {
__b.removeMovieClip();
__g.removeMovieClip();
__init__();
}
public function set distance (d:Number) {
__d = d;
}
public function get distance ():Number {
return __d;
}
public function set opacity (o:Number) {
__o = o;
}
public function get opacity ():Number {
return __o;
}
public function set uncovered (u:Number) {
__u = u;
}
public function get uncovered ():Number {
return __u;
}
public function get mirror ():MovieClip {
return __m;
}
}
la classse la richiamo cosi:
var r:Mirror = new Mirror(mc,0, 50, 100);
Qualora ci fosse qualcuno dotato di buona volonta', sarei anche curioso di capire se fosse possibile distorcere l'immagine riflessa con un effetto tipo skew cioe' variando indipendentemente le dimensioni in larghezza dei due bordi superiore ed inferiore dell'immagine, per ottenere un effetto di riflessione su un piano ortogonale all'immagine riflessa...
grazie a tutti, sempre e comunque...