2016-03-28 46 views
1

私は必要なすべてのアセット、アイコン、フォント、イメージなどを埋め込むクラスを作成しています。アセットクラスコールが機能しない

public class Assets 
{ 
    [Embed(source = "../assets/images/imageBG.png")] 
    private static var imageBG:Class; 

    [Bindable] 
    private var imageName:Class;//There wasn't a ";" here, no error but I added it just in case 

    public static function setImage(newImageName:Class):void 
    { 
     imageName = newImageName:Class; 
    } 
} 

そして私は、私は資産を呼び出すために、同じパッケージに別のクラスからこのようなものを使用することになっている:私はこれはかなりそれが持っている構造であるエイドリアンの答えからhere.

をそれを取りました(他のどのクラスでも動作するはずですが)

image = new Assets.setImage(imageBG) as Bitmap; 

これは、「ラベルは単純な識別子でなければなりません。

私は

imageName = newImageName:Class; 

imageName = newImageName; //The "Class" part was pointed as the error 

に変更した場合には、この "未定義のプロパティimagenameののアクセスを。" trows

それは

と呼ばれていますどこから 機能で呼び出され

と、この「メソッドをコンストラクタとして使用することはできません。」

「資産」の直後に表示されます。部。

私は明らかに何か間違っていますが、誰かが助けてくれればそれは何か分かりません。

また、名前を文字列として渡すアセットを呼び出すことができるように物事を変更するにはどうすればよいですか?または別の質問をする必要がありますか?

ありがとうございます。

+0

imageNameは静的ではないため、静的スコープには存在しません。 – BotMaster

答えて

1

imageNameは静的ではないため、静的スコープには存在しません。

エラーがあっても、あなたが参照している回答が受け入れられました。また、それはFlexプロジェクトのみでした。これは同じですが、修正されている:

public class Assets 
{ 
    static private var assetref:Object = {}; 

    [Embed(source = "../assets/images/imageBG.png")] 
    private static var imageBG:Class; 

    assetref["imageBG"] = imageBG; 

    public static function getImage(newImageName:String):Bitmap 
    { 
     if(assetref[newImageName]) 
     { 
      return new assetref[newImageName](); 
     } 
     return null; 
    } 
} 

はちょうどあなたがStringとして必要とそれが存在する場合は、表示するビットマップの準備ができて返されますアセットの名前を渡します。

+0

ありがとう、私はそれがFlex独占であることに気付かなかった。そして、私が[embed]タグを使ったのは初めてであるので、私がかなりよくやっていることを知らなかったので、これが問題を解決した。 – Inferry

+0

ところで、私はすべてを埋め込むために単一のクラスを使うべきですか、あるいは私は別のクラスを使うべきですか? – Inferry

+0

単一のクラスは問題ありませんが、何百ものアセットがある場合は、複数のクラスに分割したい場合があります。あなたに本当にまで。 – BotMaster

関連する問題