0

初心者なFlexので慣れないところがあります。MXML コンポーネントRectangularDropShadowDeclarationsタグにを追加しました。Rect何も表示されませんRect。 .

<?xml version="1.0" encoding="utf-8"?>
<s:Rect xmlns:fx="http://ns.adobe.com/mxml/2009" 
        xmlns:s="library://ns.adobe.com/flex/spark" 
        xmlns:mx="library://ns.adobe.com/flex/mx"
        height="314" width="478">
    <fx:Declarations>
        <!-- Place non-visual elements (e.g., services, value objects) here -->
        <s:RectangularDropShadow id="cardAreaShadow"                                
                                 alpha="0.4"
                                 distance="10"
                                 angle="45"
                                 color="#000000" />
    </fx:Declarations>
    <s:fill>
        <s:SolidColor color="#FFFFFF" />
    </s:fill>
</s:Rect>
4

1 に答える 1

2

このDeclarationsブロックは、オブジェクトの宣言のみを目的としています。つまり、ここで行っているのはRectangularDropShadow、表示リストに追加せずに のインスタンスを作成することです。これが、もちろん、表示できない理由です。

もう 1 つ知っておくべきことは、これRectangularDropShadowは少し奇妙な点です。これはフィルターではなく、それ自体が DisplayObject です。わかりやすくするために、フィルターは既存の DisplayObject に適用できる「視覚効果」です。実際には、いくつかのグラデーションRectangularDropShadowが適用された単なる長方形です。

また、これは DisplayObject でありRectコンテナーではないため、Declarationsタグを単純に削除して機能することを期待することはできません。次のように、2 つのオブジェクトを互いに重ねる必要があります。

<s:RectangularDropShadow id="cardAreaShadow" height="314" width="478"
                         alpha="0.4" distance="10" angle="45" color="#000000" />

<s:Rect height="314" width="478">
    <s:fill>
        <s:SolidColor color="#FFFFFF" />
    </s:fill>
</s:Rect>

DropShadowFilter別の方法は、 を使用するRect代わりに、 に単純に適用することRectangularDropShadowです。

<s:Rect height="314" width="478">
    <s:fill>
        <s:SolidColor color="#FFFFFF" />
    </s:fill>
    <s:filters>
        <s:DropShadowFilter alpha="0.4" distance="10" angle="45" color="#000000" />
    </s:filters>
</s:Rect>

フィルターがある場合、なぜ必要なのRectangularDropShadowですか?
その理由はパフォーマンスです。単純なグラデーションを持つ単純な形状は、任意の既存の DisplayObject に適用されるフィルターよりも効果的に計算できます。

于 2013-08-21T07:41:46.023 に答える