Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 3.0 (http://www.flasher.ru/forum/forumdisplay.php?f=83)
-   -   Не убирается фильтр из массива (http://www.flasher.ru/forum/showthread.php?t=145061)

randomnoob 28.09.2010 18:07

Не убирается фильтр из массива
 
И снова привет.
Я создаю объект (обычный квадратик). Добавляю этому объекту медоты поставить BlurFilter и убрать BlurFilter

Поставить
Код AS3:

public function setBlurFilter():void{
var blurFilter:BlurFilter = new BlurFilter(5, 5, 5);
this.filters = this.filters.concat(blurFilter);
}

Убрать
Код AS3:

public function removeBlurFilter():void{
for(var i:uint=0; i < this.filters.length; i++){
if(this.filters[i] is BlurFilter){ this.filters.splice(i, 1);}
}

Не убирает ни в какую. Я пробовал руками удалять элемент из массива
Код AS3:

this.filters.splice(0, 1)

Тоже не убирает.

Помогло только
Код AS3:

this.filters = [];

но оно убивает вообще весь массив, а мне надо удалять только BlurFilter.

Что делать?

Hidest 28.09.2010 18:29

Убивайте массив и добавляйте только то, что нужно оставить. Точнее, заменяйте новым массивом

Код AS3:

this.filters = [filter1,filter2,filter4]


andrew911 28.09.2010 18:57

В документации написано что нельзя напрямую менять массив, надо создавать временный массив с фильтрами, изменять его и присваивать.

Код AS3:

                public function removeBlurFilter():void
                {
                        var tarr:Array = this.filters;
 
                        for (var i:int = tarr.length-1; i >= 0; i--)
                        {
                                if (tarr[i] is BlurFilter)
                                {
                                        tarr.splice(i, 1);
                                }
                        }
 
                        this.filters = tarr;
                }


randomnoob 28.09.2010 19:11

Ох, надо же.
Спасибо большое.

flax4Noob 04.01.2011 17:27

Теме год с копейками. Ничего в этой области не поменялось? Я вот накладываю два фильтра одного типа и метод "is" не подходит.

Все хранят в локальных данных информацию о фильтрах и каждый раз при редактировании фильтров их перепривязывают снова? Хочется сделать красиво, не могу придумать как((( Ну и знаний не хватает пока что. Фильтерс менеджер что-то не возбуждает. (http://blog.open-design.be/2009/05/0...fects-manager/)

spooner 04.01.2011 18:04

Цитата:

Теме год с копейками
Какой год? Три месяца прошло.
Ниче не поменялось.
Второй пост посмотрите, чем не устраивает вас?

etc 04.01.2011 21:46

filters — сеттер, копирующий фильтры.

flax4Noob 05.01.2011 16:08

ну скажем так, я добавляю спрайту 2 фильтра. Один висит постоянно, второй вешается при наведении мышкой. Чтобы не тупить где какие фильтры, я сделал массив у своего спрайта из 2х элементов, и пихаю туда сначала два "пустых фильтра", а потом когда надо какой-то из фильтров "включить", тискаю его туда. Просто очень не хочется каждый раз пересоздавать фильтры. Получаются конструкции вида

Код AS3:

if(mouseOver){
var cmf:GlowFilter = new GlowFilter(0x00ffff,1)
this._filters[1] = cmf;
}else{
this._filters[1]=this._emptyFilter;
}
cell.filters=this._filters;


dimarik 05.01.2011 22:39

Создайте фильтр один раз и применяйте при необходимости.

Код AS3:

var filters:        Array = [new GlowFilter(0x00ffff,1)];
var noFilters:        Array = [];
...
cell.filters = mouseOver ? filters : noFilters;



Часовой пояс GMT +4, время: 23:29.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.