Просмотр полной версии : маска на мувик
Ситуация такова:
есть мувик ("parad"), в который программно грузится контент (эта часть работает без сбоев)
есть программно созданный прямоугольник, который тоже работает
а вот назначить этот прямоугольник в качестве маски для содержимого мувика не получается
setMask почему-то просто не работает, попробовал использовать scrollRect. В этом случае работает, но подгружаемый контент почему-то смещается, что на данный момент и является проблемой.
// импортируем необходимые классы
import flash.geom.Rectangle;
// создаем объект прямоугольник соответственно точке расположения маскируемого мувика
var boundingBox_1 : Rectangle = new Rectangle (_root.parad._x,_root.parad._y, 858, 540);
//далее подгружается контент и в самом конце пишем:
//собственно назначение маски
_root.parad.scrollRect = boundingBox_1;
//если эту строку просто закомментироваьт, то координаты работают как должны и объекты находятся на своих местах, а в таком виде происходит смещение вверх и влево
Покажу пример (пояснять, думаю, не придется)
this.createEmptyMovieClip("myMask",this.getNextHighestDepth());
myMask.beginFill(0xfff000);
myMask.lineTo(300, 0);
myMask.lineTo(300, 300);
myMask.lineTo(0, 300);
myMask.lineTo(0, 0);
myMask.endFill();
myContent.loadMovie("....")
myMask.mc=myContent;
myMask.onEnterFrame=function(){
var bt=this.mc.getBytesTotal();
var bl=this.mc.getBytesLoaded();
if(bt==bl && bt>4){
this.mc.setMask(this);
delete this.onEnterFrame;
}
}
this.createEmptyMovieClip("myMask",this.getNextHighestDepth());
myMask.beginFill(0xfff000);
myMask.lineTo(600,0);
myMask.lineTo(600,600);
myMask.lineTo(0,600);
myMask.lineTo(0,0);
myMask.endFill();
//загрузка контента
myMask.mc = _root.parad;
myMask.onEnterFrame = function() {
var bt = this.mc.getBytesTotal();
var bl = this.mc.getBytesLoaded();
if (bt == bl && bt>4) {
this.mc.setMask(this);
delete this.onEnterFrame;
}
};
При этом отобрражается просто квадрат указанных размеров поверх всего. Маска не работает.
ЗЫ. Кстати, в моем изначально варианте если прикинуть на глаз, то все координаты начинают считаться от начала документа в целом, а не от начала мувика. Это конечно можно исправить добавлением разницы, но имхо такой подход не оправдан. Так что буду рад новым идеям.
сделайте отдельно клип в который грузится содержимое, и отдельно маску, и будет вам счастье... )
var image:MovieClip = this.createEmptyMovieClip("image", 0);
var container:MovieClip = image.createEmptyMovieClip("container", 0);
var mask_mc:MovieClip = image.createEmptyMovieClip("mask_mc", 10);
mask_mc._visible = false;
mask_mc.beginFill(0xfff000);
mask_mc.lineStyle(0, 0, 0);
mask_mc.lineTo(300,0);
mask_mc.lineTo(300,300);
mask_mc.lineTo(0,300);
mask_mc.lineTo(0,0);
mask_mc.endFill();
var mcLoader:MovieClipLoader = new MovieClipLoader();
var listener:Object = new Object();
listener.onLoadInit = function(target:MovieClip):Void {
target.setMask(target._parent["mask_mc"]);
};
mcLoader.addListener(listener);
mcLoader.loadClip("someimage.jpg",container);
пример конечно кривой, но суть думаю понятна...
и все же использование scrollRect предпочтительнее, если используется прямоугольная маска - это лучше для производительности (личный опыт и заверения разработчиков), под скроллРектом не теряются не-внедренные и системные шрифты.
Главное понять как с координатами работать.
bbexp, вот тото и оно. Мне пришлось делать поправку на расположение мувика из-за сбившейся системы координат при назначении этой функции.
А в НЕТе кстати по этой теме инфы крайне мало. Гугл мне по поиску всего лишь с десяток ссылок дал (даже меньше) на русише, где упоминается scrollRect и setMask
Ну а с координатами все просто.
scrollRect требует в качестве значения объект типа Rectangle.
точка регистрации - это 0,0.
У Rectangle есть x и y, которые могут быть как отрицательными, так и положительными. Изменение координат прямоугольниика как раз и даст возможность показать определенный участок клипа, при этом координаты самого клипа остаются неизменными.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.