2016-05-01 2 views
1

Я пытаюсь изменить цвет мувиклипа при щелчке, однако на нем есть теневой фильтр, который я хочу оставаться черным.Запрет ColorTransform изменять другие цвета фильтра (AS3)

var cty:ColorTransform = new ColorTransform(); 
cty.color = 0xFFFF00; //color transform yellow 
var shdw:DropShadowFilter = new DropShadowFilter(); 
shdw.color = 0x000000; <----clearly set to black 
shdw.distance = 3; 
shdw.angle = 45; 
shdw.strength = 1; 
shdw.blurX = 3; 
shdw.blurY = 3; 
thisclip.filters=[shdw]; 

thisclip.addEventListener(MouseEvent.CLICK,myevent); 
function myevent(e:MouseEvent):void 
{ 
thisclip.transform.colorTransform = cty; 
thisclip.filters=[shdw]; <------ tried adding a refresher but doesnt work 
} 

Проблема заключается в том, что после того, как цвет изменить тень меняется на тот же цвет, как объект, есть ли способ, чтобы изменить цвет, не изменяя цвет тени фильтра ???

ответ

1

Проблема заключается в том, что после того, как цвет изменить тень меняется на тот же цвет, как объект, есть ли способ, чтобы изменить цвет без изменения цвета тени фильтра ???

Вы должны отделить элемент, который вы хотите быть дроп-слежка и элемент, который вы хотите цвет преобразованного. Один из способов - создать «контейнер» для thisclip и применить тень к самому контейнеру, а затем преобразовать только цвет this clip. Я изменил свой код, чтобы показать, что я имею в виду ...

var cty:ColorTransform = new ColorTransform(); 
cty.color = 0xFFFF00; //# yellow 

var shdw:DropShadowFilter = new DropShadowFilter(); 
shdw.color = 0x000000; //# black 
shdw.strength = 1; 
shdw.distance = 3; shdw.angle = 45; 
shdw.blurX = shdw.blurY = 3; //# linked since same value for both 

var contMC : MovieClip = new MovieClip; 
addChild(contMC); //# add to stage 
contMC.addChild(thisclip); //# add "thisclip" into container MC 
contMC.x = 0; contMC.y = 0; //# set your own position 

//thisclip.filters=[shdw]; 
contMC.filters=[shdw]; 

thisclip.addEventListener(MouseEvent.CLICK, myevent); 

function myevent(e:MouseEvent):void 
{ 
    thisclip.transform.colorTransform = cty; 
    //e.currentTarget.transform.colorTransform = cty; //# use this for ANY listening object 

} 

Просто помните, если вы создаете контейнер MC с помощью кода (как я показал) вы можете ссылаться на любые добавленные детей их обычными именами экземпляров, как так: thisclip.transform.colorTransform = cty;

Но если создать контейнер MC на сцене (с именем экземпляра contMC и вырезать/вставить thisclip MC в него, то теперь ссылаться на него в коде, как: contMC.thisclip.transform.colorTransform = cty;

Совет № 1: Для того, чтобы избежать добавление контейнер, если сама ваша thisclip имеет MC (или Sprite), проведение некоторых «окрашиваться» содержание вы можете вместо того, чтобы предназначаться, что содержание его имя экземпляра:
thisclip.someContent.transform.colorTransform = cty;
(здесь thisclip становится контейнер с тенью, в то время как someContent является внутренний MC будет преобразован в цвет).

Совет № 2: Я добавил строку e.currentTarget.transform.colorTransform = cty; (но закомментирована так не используется), чтобы показать, как вы могли бы иметь какой-либо нажал MC реагировать на цвет преобразования. Просто убедитесь, что они слушают событие так:
clipInstanceName.addEventListener(MouseEvent.CLICK, myevent);
(теперь вы можете иметь несколько IF проверки и регулировки цвета соответственно на щелкнули пункта с использованием cty.color = some new Value; внутри if заявления, прежде чем окончательно установив, что .colorTransform = cty; ...

+0

отлично поработал, спасибо – Koden

Смежные вопросы