#apache-flex #actionscript #flash-builder #transform #colortransform
#apache-flex #actionscript #flash-builder #преобразовать #colortransform
Вопрос:
Если у меня есть прямоугольник, который имеет заливку синим и обводку оранжевым, как я могу изменить обводку на черный, а заливку на красный с помощью actioncript.
Когда я использую следующий код, он изменяет весь прямоугольник на 0x008000 (зеленый). Либо заливка покрывает обводку, либо она изменяет как заливку, так и обводку на 0x008000 (зеленый).
var myColor:ColorTransform = myRectangle.transform.colorTransform;
savedColor = myRectangle.transform.colorTransform;
myColor.color = 0x008000;
myRectangle.setColorTransform(myColor);
Я замечаю, что когда я конвертирую обратно в сохраненный цвет, он возвращает исходные цвета заливки и обводки, как я хочу.
myRectangle.setColorTransform(savedColor);
Я просто не могу изменить прямоугольник на другой цвет для заливки и для обводки при первом изменении без сохранения.
Что я хочу иметь возможность сделать, это установить заливку и обводку в разные цвета, а также контролировать, будет ли заливка покрывать обводку.
Пожалуйста, посмотрите Ниже простую программу flex, которую можно использовать для настройки и дать ответ, если вы можете это понять:
Заранее спасибо Лоуренс
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="0" minHeight="0" usePreloader="true">
<fx:Script>
<![CDATA[
public var savedColor:ColorTransform;
protected function button1_clickHandler(event:MouseEvent):void
{
var myColor:ColorTransform = GEN1.transform.colorTransform;
savedColor = GEN1.transform.colorTransform;
myColor.color = 0x008000;
GEN1.setColorTransform(myColor);
b1.visible = false;
b2.visible = true;
}
protected function button2_clickHandler(event:MouseEvent):void
{
GEN1.setColorTransform(savedColor);
b2.visible = false;
b1.visible = true;
}
]]>
</fx:Script>
<fx:Declarations>
</fx:Declarations>
<s:Group>
<s:layout>
<s:VerticalLayout paddingTop="10"/>
</s:layout >
<s:Group>
<s:layout>
<s:HorizontalLayout/>
</s:layout>
<s:Button id="b1" click="button1_clickHandler(event)" label="Generator 1 ON"/>
<s:Button id="b2" visible="false" click="button2_clickHandler(event)" label="Generator 1 OFF"/>
</s:Group>
<s:Group >
<s:Graphic version="2.0" xmlns:d="http://ns.adobe.com/fxg/2008/dt" xmlns:fc="http://ns.adobe.com/flashcatalyst/2009" viewHeight= "645" viewWidth= "1043">
<s:Path winding="evenOdd" data="M 341 30 C 341 19 350 10 361 10 C 372 10 381 19 381 30 C 381 41 372 50 361 50 C 350 50 341 41 341 30 Z " blendMode="normal" alpha="1" id="GEN1">
<s:fill>
<s:SolidColor color="#b6b6b6"/>
</s:fill>
<s:stroke>
<s:SolidColorStroke color="#333333" weight="4" caps="none"/>
</s:stroke>
</s:Path>
</s:Graphic>
</s:Group>
</s:Group>
</s:Application>
Ответ №1:
Дайте им идентификаторы:
<s:Graphic version="2.0" xmlns:d="http://ns.adobe.com/fxg/2008/dt" xmlns:fc="http://ns.adobe.com/flashcatalyst/2009" viewHeight= "645" viewWidth= "1043">
<s:Path winding="evenOdd" data="M 341 30 C 341 19 350 10 361 10 C 372 10 381 19 381 30 C 381 41 372 50 361 50 C 350 50 341 41 341 30 Z " blendMode="normal" alpha="1" id="GEN1">
<s:fill>
<s:SolidColor color="#b6b6b6" id="fill"/>
</s:fill>
<s:stroke>
<s:SolidColorStroke color="#333333" weight="4" caps="none" id="stroke"/>
</s:stroke>
</s:Path>
</s:Graphic>
Затем в ActionScript просто измените свойства класса:
fill.color = 0x000000;
stroke.color = 0xffffff;
Комментарии:
1. Большое вам спасибо за этот ответ. Могу ли я не получить к этому доступ из идентификатора объекта GEN1? Причина, по которой я спрашиваю, заключается в том, что в моем приложении сотни векторных объектов, и это значительно увеличило бы количество идентификаторов, которые я должен отслеживать. Заранее спасибо за вашу помощь.
2. Заливка и обводка являются свойствами объекта gen1. Итак, вы могли бы сделать что-то вроде этого: gen1.fill.color = = 0x000000; или gen1.stroke.color = 0xffffff;