1

あられ、スタック!

ファイルへのライブラリパスを設定せずに、ActionScriptでSWCファイルを直接インポートする方法を理解するのに少し問題があります。

例として、次のようなものが必要です。

package
{
    [Embed(source = 'Library.swc')] // This line won't work, of course...

    import ClassInsideSWC;

    public class MyClass extends ClassInsideSWC
    {
        public function MyClass()
        {
            super();
        }
    }
}

Loaderその上、クラスをロードしてSWCをインポートしたくありません(実際にはインポートできません) 。

さて、誰かがActionScriptコードのみを使用してSWCにリンクする方法を知っていますか?


編集済み

問題に関する詳細情報を追加するために、シナリオの詳細を紹介します...

私にはSubClass他のクラスから独立したクラスがあります。SuperClassSWC/SWF内にあるクラスを拡張します...

このSWC/SWFにはフレームワーク全体があります。1つのSWF内ですべてのクラスをコンパイルすることはできません。私のフレームワークのすべての部分はSWFから離れており、実行時にLoaderクラスによってダウンロードされます。

残念ながら、@frankhermesの回答は機能しません。そのメソッドはクラスをダウンロードせず、SWC内で他のクラスを拡張または使用することを許可しません。

ライブラリパスを設定すると、これが可能になります...

4

2 に答える 2

3

ショーン・フジワラの答えに対する可能な修正:

[Embed(source="SWFWireDecompiler.swc", mimeType="application/octet-stream")]
public var SWC:Class;

次のようにする必要があるかもしれません:

[Embed(source="SWFWireDecompiler.swf", symbol="ClassInSWC")]
public class ClassInSWC
{
   ....
}

編集:コメントの後のフォローアップとして、これは受け入れられる答えを得るための別の試みです:

package
{
    import flash.display.Sprite;

    public class SWCTest extends Sprite
    {
        public function SWCTest()
        {
            var extended:ExtendedCrumbs = new ExtendedCrumbs();
        }
    }

}

[Embed(source="../swfs/assets.swf", symbol="assets.Crumbs")]
class CrumbsInSWC
{

}

class ExtendedCrumbs extends CrumbsInSWC
{
    public function ExtendedCrumbs()
    {
        super();
    }

    // override something here
}

symbol="..."残念ながら、swcを使用する場合は Embed ステートメント内で使用できないため、swc ではなく、swf ファイルでのみ機能します。しかし、上記のコードはコンパイルされます。プロジェクト内の任意の場所に swf ファイルを配置し、Embed ステートメント内のソース パスを調整します。

これがまだあなたに役立つことを願っています!フランク

于 2011-03-13T13:13:47.557 に答える
0

「もちろん、この行は機能しません...」と言うのはなぜですか? あなたはほとんど正しいです。いくつか欠けているだけです。

[Embed(source="SWFWireDecompiler.swc", mimeType="application/octet-stream")]
public var SWC:Class;

次に、データを ByteArray として取得できます。

var data:ByteArray = new SWC();
于 2011-03-13T04:49:53.487 に答える