PDA

Просмотр полной версии : эффект зеркального отображения


sector_222
22.02.2009, 01:33
дорый день, пытаюсь сделать эффект зеркального отображения списка мувиклипов

import mx.transitions.Tween;
import mx.transitions.easing.*;
import flash.display.BitmapData;
import flash.geom.Matrix;


function callThumbsGoriz() {
// создаём пустой клип с нужными координатами для панели прокрутки с мелкими фотками
_root.createEmptyMovieClip("container_mcZ",_root.getNextHighestDepth());
container_mcZ._x = _root.goriz_x;
container_mcZ._y = _root.goriz_y;


//создаём прелоадер
var clipLoader = new MovieClipLoader();
var preloader = new Object();
clipLoader.addListener(preloader);

//пока не кончится все фотки загружаем их в контейнер
for (i=0; i<myImagesTotal; i++) {
thumbURL = myImages[i].attributes.thumb_url;
myThumb_mc = container_mcZ.createEmptyMovieClip(i, container_mcZ.getNextHighestDepth());
myThumb_mc._x = (_root.thumb_height*i); //координата следующей фотки = ширина фотки * i
clipLoader.loadClip("thumbs/"+thumbURL,myThumb_mc); // загружаем фотку

//прелоадер в виде текстового поля
preloader.onLoadStart = function(target) {
target.createTextField("my_txt",target.getNextHighestDepth,60,60,100,20);
target.my_txt.selectable = false;
};


preloader.onLoadProgress = function(target, loadedBytes, totalBytes) {
target.my_txt.text = Math.floor((loadedBytes/totalBytes)*100);
};
//при окончании загрузки прячим прелоадер
preloader.onLoadComplete = function(target) {
new Tween(target, "_alpha", Strong.easeOut, 0, 100, 7, true);
target.my_txt.removeTextField();

reflect(target);//здесь я вызываю функцию зеркального торажения

//принажатии на изображение вызываем загрузку большого фото
target.onRelease = function() {
callFullImage(this._name);
};
//при наведении на изображение - прозрачность на 50%
target.onRollOver = function() {
this._alpha = 50;
};


target.onRollOut = function() {
this._alpha = 100;
};


};
}

}


function reflect(target_mc:MovieClip):Void{
var myBitmapData:BitmapData = new BitmapData(target_mc._width, target_mc._height, false, 0x00CCCCCC);
var mc_1:MovieClip = this.createEmptyMovieClip("reflect_mc", 2);
mc_1.attachBitmap(myBitmapData, 3);
myBitmapData.draw(target_mc);
reflect_mc._yscale = -100;
reflect_mc._y= target_mc._y+target_mc._height*2+5;
reflect_mc._x = target_mc._x;
setupReflection(reflect_mc);
}
// функция создания зеркальной заливки
function setupReflection(target_mc:MovieClip):Void{
this.createEmptyMovieClip("mask_mc",50);
with (mask_mc)
{
colors = [0x000000, 0xFFFFFF];
fillType = "linear"
alphas = [100, 0];
ratios = [127, 255];
spreadMethod = "pad";
interpolationMethod = "RGB";
focalPointRatio = 1;
matrix = new Matrix();
matrix.createGradientBox(target_mc._x, target_mc._y, Math.PI/2, 0, -175);
beginGradientFill(fillType, colors, alphas, ratios, matrix,
spreadMethod, interpolationMethod, focalPointRatio);
moveTo(target_mc._x, target_mc._y);
lineTo(target_mc._x, target_mc._y-target_mc._height);
lineTo(target_mc._x+target_mc._width, target_mc._y-target_mc._height);
lineTo(target_mc._x+target_mc._width, target_mc._y);
lineTo(target_mc._x, target_mc._y);
endFill();
}
//копируем изображение
target_mc.cacheAsBitmap = true;

//дубликат наебарот
mask_mc.cacheAsBitmap = true;
//эффект зеркала
target_mc.setMask(mask_mc);
/*mask_mc._alpha =50;*/

}





где моя ошибка? подскажите пожалуйста :rolleyes:

scarbo
22.02.2009, 02:16
забудьте про LoadComlete,используйте onLoadInit,даже в хелпе об этом сказано
Да и вообще у Вас там код какой-то странный.
import mx.transitions.*;
import mx.transitions.easing.*;
import flash.display.*;
import flash.geom.*;
import flash.filters.*;
//
var blur:BlurFilter = new BlurFilter(2,2,2);
callThumbsGoriz();
//
function callThumbsGoriz() {
var target:MovieClip = _root.createEmptyMovieClip("target", 2);
for (var i = 0; i<4; i++) {
var mcl:MovieClipLoader = new MovieClipLoader();
var obj:Object = {};
mcl.addListener(obj);
//
var mc:MovieClip = target.createEmptyMovieClip('mc'+i, i);
var pic:MovieClip = mc.createEmptyMovieClip('pic', 0);
var bmp:MovieClip = mc.createEmptyMovieClip('bmp', 2);
var mask:MovieClip = mc.createEmptyMovieClip('mask', 4);
//
mc._x = 0+100*i;
//
obj.onLoadInit = function(pic) {
var mc = pic._parent;
mc.varTween = new Tween(mc, '_alpha', Regular.easeOut, 0, 100, 2, true);
reflect(pic);
setupReflection(pic);
};
mcl.loadClip('photo/master_thumb/001/001.jpg', pic);
}
}
function reflect(mc:MovieClip) {
var bmp = mc._parent.bmp;
var bitmap:BitmapData = new BitmapData(mc._width, mc._height, true, 0);
bitmap.draw(mc);
bmp.attachBitmap(bitmap, 2, 'auto', true);
bmp._yscale = -100;
bmp._y = mc._height*2+5;
bmp._x = mc._x;
bmp.filters = [blur]
}
function setupReflection(mc:MovieClip) {
var mask = mc._parent.mask;
var bmp = mc._parent.bmp;
//
with (mask) {
_y = mc._height+5;
matrix = new Matrix();
matrix.createGradientBox(mc._width, mc._height, Math.PI/2, 50, -20);
beginGradientFill('linear', [0x000000, 0xffffff], [100, 0], [0, 0xff], matrix, 'pad', 'RGB', 1);
moveTo(0, 0);
lineTo(mc._width, 0);
lineTo(mc._width, mc._height);
lineTo(0, mc._height);
lineTo(0, 0);
endFill();
}
bmp.cacheAsBitmap = true;
mask.cacheAsBitmap = true;
mask._alpha = 80;
bmp.setMask(mask);
}

sector_222
22.02.2009, 13:15
код действительно специфичный - это потому что создаётся отдельный прелоадер для каждой картинки на время загрузки - а проблема значит в отсутсвии в коде

onLoadInit() - буду думать как переделать - спасибо =)

Добавлено через 1 час 51 минуту
сделал - во что получилось :

function callThumbsGoriz() {
this.createEmptyMovieClip("container_mcZ",this.getNextHighestDepth());
container_mcZ._x = _root.goriz_x;
container_mcZ._y = _root.goriz_y;



var target:MovieClip = _root.createEmptyMovieClip("target", 2);
for (var i = 0; i<myImagesTotal; i++) {
thumbURL = myImages[i].attributes.thumb_url;
var mcl:MovieClipLoader = new MovieClipLoader();
var obj:Object = {};
mcl.addListener(obj);
//
//myThumb_mc = container_mcZ.createEmptyMovieClip(i, container_mcZ.getNextHighestDepth());
mc = container_mcZ.createEmptyMovieClip(i, container_mcZ.getNextHighestDepth());
//var mc:MovieClip = target.createEmptyMovieClip('mc'+i, i);
var pic:MovieClip = mc.createEmptyMovieClip('pic', 0);
var bmp:MovieClip = mc.createEmptyMovieClip('bmp', 2);
var mask:MovieClip = mc.createEmptyMovieClip('mask', 4);
//
mc._x = _root.thumb_height*i;
//
obj.onLoadInit = function(pic) {
var mc = pic._parent;
mc.varTween = new Tween(mc, '_alpha', Regular.easeOut, 0, 100, 2, true);
reflect(pic);
setupReflection(pic);
pic.onRelease = function() {
//callFullImage(this._name);//загружаем большое фото
};
//при наведении на изображение - прозрачность на 50%
pic.onRollOver = function() {
this._alpha = 50;
//_root.bmp.mask._alpha = 50;

};
// и наоборот
pic.onRollOut = function() {
this._alpha = 100;
};

};
mcl.loadClip("thumbs/"+thumbURL, pic);
}
}


но не могу понять как сделать - чтобы при наведении курсора на изображение менялась альфа не только на нём - но и на зеркальном отображении. есть идеи?

scarbo
22.02.2009, 15:37
pic.onRollOutпоменяй pic на mc

sector_222
22.02.2009, 15:53
спасибо =)