2012-01-08 33 views
1

私は、svgファイルの異なるレイヤーに色付けする必要があるプロジェクトを持っています。私は色の変換をしようとしたが、それは単にsvg画像の上に色のオーバーレイを置く。プログラムでAS3のさまざまな色のsvgファイルのさまざまなレイヤーを色付けするにはどうすればいいですか?as3のsvgファイルの異なるレイヤーに色付けする

ありがとうございます。

+1

FlashにはSVGのネイティブサポートはないと思います。ファイルをロードするにはどうすればいいですか? – Staven

+0

私はこれを使ってsvgを表示しています - http://www.flowde.com/blog-examples/svg/ – rohan

+0

これは本当に何も説明していません。誰もがSWFを逆コンパイルすると思いますか? SVGをレンダリングするために何らかのライブラリを使用していますか? – Staven

答えて

2

SVGはXML形式なので、Flashで読むことができます。しかし、AdobeはSVGのサポートを一般的に中止しています(Illustratorと他のいくつかを除いて)、実際には1つの特定のことを行うことができるかどうかは別です。使用している、それはSVGのXMLを処理するためにaddSVGNodeToMC()呼ばcom.flowde.svg.svgViewerクラスの再帰的なメソッドを使用していることsvgViewerに関する

。このメソッドは、何かを描画し、再帰的に描画します。

SVGを見ると、いくつかのファイルがSVGグループ(read up on it here)を使用しています。 。 。それはレイヤーの意味ですか?その場合、addSVGNodeToMC()<g>マークアップのためにswitch()コマンドにエントリを持っています。これはあなたが(おそらく)色付けのためにコードをハイジャックすべき場所です。

しかし、どのように色が使用されているのかという問題があります。 SVGでは、属性メソッド、またはstyle="*style def*"メソッドを使用できます。 getStyle()メソッドは、このXML書式を汎用オブジェクトに変換します(スタイル名をキーに、スタイル値をマップのエントリ値としてマップと見なします)。メソッドgetCombinedStyle(styleA, styleB)を使用すると、2つの異なるスタイルが結合され、styleBのすべてのエントリが、一致するスタイル名を上書きします(styleA)。また、getCombinedStyle()に電話することもできます。

この複合スタイルオブジェクトは、最終的にinitSetStyle()に渡され、AS3/Flashスタイルに変換されます。

だから、良い割り込みはObjectをあなたが欲しいスタイルの色でビルドし、getCombinedStyle(styleA, yourStyleObject)を使用するように見えます。このコードには、異なるグループを区別するためのいくつかの機能が必要です。そのため、グループのid属性などを使用して色を設定することができます。ストロークの色や塗りつぶすには:

[...] 
case "g": 
    st = setYourGroupStyle(st, node.attribute("id")); 

    child=new Sprite(); 
    for each(var el:XML in node.elements()){ 
     var c2=addSVGNodeToMC(el,child,st); 
     if(c2) child.addChild(c2); 
    } 
break; 
[...] 

あなたはいくつかの種類の数取器としてそれを設定することができるように値groupIdは、何もすることができることを注意:

private function setYourGroupStyle(st, groupId){ 
    var yourStyleObject:Object = new Object(); 

    // for the stroke color: 
    // In place of simply setting the color value, 
    // you could create another method like 
    // someColorFunctionality(groupId) and call that here. 
    yourStyleObject['stroke'] = "#ff0000"; 

    // for the fill color: 
    yourStyleObject['fill'] = "#ff0000"; 

    return getCombinedStyle(st, yourStyleObject); 
} 

あなたは次のようにその関数を呼び出します(例えば、st = setYourGroupStyle(st, level++);)、その値に基づいて何が起こるかを定義します。

ただし、このクラスを使用するには、書面による許可が必要な場合があります。私はそれについてのライセンス契約を見つけることができません。これはあなたを法律上の縁故に置きます。商用プロジェクトの場合は、許可を得るまでに十分な時間です。

HTH!

関連する問題