2012-05-21 2 views
0

creationComplete 이벤트의 일부 버튼에 드롭 섀도우 효과를 추가하려고합니다.Flash Builder AS3의 버튼에 필터 추가 AS3

import flash.filters.DropShadowFilter;

// #1 Does work but removes other filters 
protected function onButtonCreate(e:Event):void 
{ 
(e.target as Button).filters = [new DropShadowFilter(1,45,0x000000,0.4,4,4,2,1,false,true,false)]; 
} 


// #2 Does not work 
protected function onButtonCreate(e:Event):void 
{ 
(e.target as Button).filters.push(new DropShadowFilter(1,45,0x000000,0.4,4,4,2,1,false,true,false)); 
} 


// #3 Does not work 
protected function onButtonCreate(e:Event):void 
{ 
(e.target as Button).filters[(e.target as Button).filters.length] = new DropShadowFilter(1,45,0x000000,0.4,4,4,2,1,false,true,false); 
} 

내가 뭘 잘못하고 있니? 올바른 방법은 무엇입니까?

편집 : 저는 flex Spark 테마를 사용하고 있습니다. 버튼의 filters 배열에는 요소가 없지만 filter 속성을 변경하면 Spark 테마의 적용된 스타일이 모두 제거됩니까?

답변

3

이 구현은 좀 이상하다. 배열에 대한 업데이트를 수신하지 않지만 배열을 설정하면 필터가 업데이트됩니다. 그래서 이것은 여러분이 그것을 어떻게 풀어 내는지 (오래된 배열을 복사하고 새로운 배열을 푸는 것입니다).

var button:Button = (e.target as Button); 
var oldFilters:Array = button.filters; 
oldFilters.push(new DropShadowFilter(1,45,0x000000,0.4,4,4,2,1,false,true,false)]); 
button.filters = oldFilters; 

이것은 당신이 기존 배열의 내용을 가진 새로운 배열을 만들어야합니다 일, 새로운 배열에 새 필터를 밀어하지 않습니다.

+0

감사합니다. 작동하지 않고 새 필터 만 적용됩니다. 또한 효과를 적용하기 위해 왜 먼저 복사해야하는지 이해하지 못합니다. 필터가 동적 속성이기 때문에이게 맞습니까? – Codebeat

+0

당신의 솔루션이 효과가있을 것이라고 생각합니다. 새 필터를 적용하기 전에 필터에는 요소가 없습니다. 다른 스타일은 제거 될 것이고, 저는 Flex Spark 테마를 사용하고 있습니다. 어떻게 해결할 수 있을까요? – Codebeat

+0

내 편집을 참조하십시오. 이것은 작동해야합니다 (전에 이런 식으로했습니다). – RasmusWL