Просмотр полной версии : Помогите настроить Blur
serdeles
21.05.2010, 15:35
import flash.filters.BlurFilter;
import flash.display.BitmapData;
import flash.geom.Rectangle;
import flash.geom.Point;
var blur:BlurFilter = new BlurFilter(10, 10, 3);
blur_button.onPress = function(){
var bmp:BitmapData = new BitmapData(Stage.width, Stage.height, false, 0xFFFFFF);
this._visible = false;
var rect:Rectangle = new Rectangle(0,0,Stage.width, Stage.height);
var point:Point = new Point(0,0);
bmp.draw(_root);
_root.attachBitmap(bmp, _root.getNextHighestDepth(), "auto", true);
bmp.applyFilter(bmp,rect,point,blur);
this.swapDepths(_root.getNextHighestDepth());
this._visible = true;
close_btn.onPress = function(){
bmp.dispose();
_root.blur_button.enabled = true;
this._parent.removeMovieClip();
}
close_btn.swapDepths(_root.getNextHighestDepth());
oval.swapDepths(_root.getNextHighestDepth());
this.enabled = false;
}
Под close_btn, и oval после применения фильтра Blur появляется тень (их разблёренная копия). В то же время, под blur_button её нет.
Помогите избавиться от тени под close_btn, и oval.
Исходник в CS3.
serdeles
24.05.2010, 11:04
Неужели нет вариантов?
Для начала. У вас вот это что такое? Это у вас обработчик написан внутри другого.
close_btn.onPress = function(){
bmp.dispose();
_root.blur_button.enabled = true;
this._parent.removeMovieClip();
trace(this);
}
Трейс посмотрите-ка что выводит.
Вы этого ожидали?
Не пишите одни обработчики внутри других.
Если нужно динамически назначать функцию-обработчик, то пользуйтесь конструкциями вида
btn.onPress = function() {
....
otherBtn.onPress = othBtnOnPress;
};
function othBtnOnPress () {
...
}
Тогда и понятнее будет, что и как происходит. Дальше не смотрел, потому что неясно, что там и как должно быть.
PS. Попробуйте swapDepths убрать в конце, кстати, и посмотрите, что выйдет.
serdeles
24.05.2010, 11:26
Если бы я хорошо знал синтаксис AS, написал бы грамотнее. Основной код нашёл тут http://www.flasher.ru/forum/showpost.php?p=768454&postcount=10%29.
Дописывал сам, пытаясь экспериментировать. Максимум, чего добился — в моём коде и исходнике. В чём проблема, описал в топике и приложил исходник для наглядности.
Честно искал решение в поиске, да и сам пытался, но не получилось. Поэтому, собственно, и обращаюсь с вопросом.
Вот я и спрашиваю - что вы хотите, собственно? Какого поведения?
serdeles
24.05.2010, 11:32
Ну, проблема в том, что под close_btn и oval возникает их заблёренная копия. А нужно, чтобы не возникало — под blur_btn копии с блёром нет.
Над этим уже третьи сутки бьюсь, но так ничего и не выходит (
close_btn.swapDepths(_root.getNextHighestDepth());
oval.swapDepths(_root.getNextHighestDepth());
Закомментриуйте, уберите.
serdeles
24.05.2010, 11:36
Но ведь это помогает поднять их наверх?
Сейчас попробую...
Копия заблеренная не "возникает", а остается, так как слепок вы делаете по всему _root, а эти мувики там есть.
Вытащите все рисунки, которые надо "блерить", в отдельный мувик и делайте слепок с него, а не с _root.
serdeles
24.05.2010, 11:37
То есть, мне нужно прописать имена только тех мувиков, которые надо размыть? Логика понятна. А если их будет много? Все перечислять?
Кстати, конструкция
this.swapDepths(_root.getNextHighestDepth()); с последующим removeMovieClip(); позволяет удалить со сцены мувик, нарисованный в авторской среде, а не созданный программно, вы это понимаете?
Добавлено через 50 секунд
То есть, мне нужно прописать имена только тех мувиков, которые надо размыть? Логика понятна. А если их будет много? Все перечислять?
Перенесите все, что надо блюрить в отдельный мувик, container, с него и берите слепок, тогда будет не bmp.draw(_root);
, а, например,
bmp.draw(container);
serdeles
24.05.2010, 11:42
В общих чертах понимаю. У меня все мувики авторские (не программные). Изначально в коде были строки, которые программно импортировали на сцену мувики, но я это стер, так как ничего не аттачу.
Добавлено через 3 минуты
Конвертнул нижние цветные объекты в символ, прописал имя получившегося мувика вместо _root — теперь всё ОК. Однако, открытым остаётся вопрос о ситуации, когда мувиков, которые необходимо размыть, много (например, штук 50). Все их придётся прописывать тогда?
Вам требуется, чтобы кнопки и овал оставались без блюра всегда, а все остальное блёрилось?
Я же говорю, рисуйте все, подлежащее блеру, в отдельном мувике, тогда не потребуется отдельное "прописывание".
ИМХО. Тут и без битмапы можно обойтись.
serdeles
24.05.2010, 11:49
Перенесите все, что надо блюрить в отдельный мувик, container
Это понятно. Просто изначально все мувики также взаимодействуют с другим кодом, который также располагается на первом кадре сцены. Придётся припысывать к именам container.mc...
Вообще, это хоть какой-то, но выход, да.
Спасибо за помощь!
Добавлено через 6 часов 52 минуты
Однако, вариант с контейнером не годится. Проблема в том, что моя флешка — резиновый флеш сайт. В главной сцене с большим трудом я расставил объекты и задал им свойства onResize. Поместить всё это в отдельный контейнер — не вариант.
Странно, что нельзя прописать исключения для данного кода. Например, отменить отрисовывание битмапдаты под конкретными объектами (close_btn и oval). Или всё-таки можно? М?
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.