2

半初心者の質問です。私は何年もプログラミングをしてきましたが、私の初期の経験はすべて OOP の前であり、私の脳はそのように落ち着いていました。私はActionscriptも初めてです。うまくいけば、これは誰かにとって簡単なものです。

as3svgrendererlib を使用して SVG をインポートしています。うまく機能しますが、出力するグラフィックをシリアル化できる必要があります。しかし、スプライトをシリアル化することはできないので、可能なものを取得するには IGraphicsData レベルまで下る必要があります。しかし、図書館は私にそのデータを提供しません。それは私にスプライトを与えるだけです。だから私はそれを変える必要があります。

最終的に使用する描画メソッド ( 、 など) はほんの一握りしかないため、beginFillそれらdrawRectに接続して IGraphicsData を出力する独自のコードで補完できれば、ビジネスになると思います。「拡張」クラスを使用してそれを行うことができることはわかっていますが、これらの標準呼び出しをすべてカスタム呼び出しに変更するには、ライブラリを大幅に変更する必要があります。

だから私は疑問に思っています:元の呼び出しを変更する必要なく、既存のメソッドへの呼び出しを普遍的にインターセプトするメソッドを作成する魔法の OOP 方法はありますか?

ありがとう!:)

編集:解像度に依存しない必要があるため、グラフィックをベクターに保持し、ビットマップに変換しないことが重要です。

4

1 に答える 1

0

このようなことは OOP ではできません。クラスをオーバーライドするか (ただし、あなたの場合はそれができない場合があります)、ライブラリを直接変更する必要があります。

ただし、あなたの場合、可能な解決策は次のとおりです。

  1. ライブラリを使用して SVG をスプライトに描画します。
  2. スプライトを に描画しBitmapDataます。
  3. 最後に、 を使用してピクセル データを取得しgetPixels()、シリアル化します。

このようなものが機能するはずです。

var sprite:Sprite = new Sprite();

// Add the child to the stage...
// Draw the SVG to the sprite...

var bmpData:BitmapData = new BitmapData(spriteWidth, spriteHeight);
bmpData.draw(sprite);

var pixelData:ByteArray = bmpData.getPixels(new Rectangle(0, 0, bmpData.width, bmpData.height));

// Here serialize the byte array

この例では、spriteWidth/spriteHeight が必ずしも "sprite.width" と "sprite.height" であるとは限らないことに注意してください (スプライトはしばしば、予想とは異なる寸法を報告します)。そのため、レンダリングされた SVG のサイズを事前に決定し、これをビルド時に使用する必要がありますBitmapData

于 2012-06-06T13:42:35.207 に答える