1

私は現在、カードと背景に複数のテーマを持つ小さな記憶ゲームを作成しています。1セットの画像をゲームに埋め込むことができましたが、もっと多くのテーマを持つことができるようにしたいと考えています。これを実現するために、異なるカードに対してこれを 8 回使用します。

public var c1:String;
[Embed(source = c1)]
public var Card1:Class;

これで、コンストラクタを次のように作成しました。

public function Theme( _c1:String)
{
c1 = _c1;
}

指定されたテーマの別のクラスで、このコンストラクターを次のように使用します。

var Fruit:Theme = new Theme (".../lib/Apple.jpg");

今、これが何をするのか、画像のソースである文字列 c1 を持つテーマの新しいオブジェクトを作成し、その文字列ソースを使用して埋め込みソースに入れて画像を作成すると信じていますが、これらのエラーが発生しますメッセージ:

c1 does not have a recognized extension, and a mimeType was not provided. 
Unable to transcode c1

どうすればこれを防ぐことができますか?

4

2 に答える 2

0

それはうまくいかないと思います。

フラッシュでは、次のいずれかで画像を埋め込むことができます。

[Embed(source="picture.jpg")]
private var Picture:Class;

または、 loaderを使用して外部イメージとして (実行時に) 動的にロードできます。

各画像をクラスとして埋め込み、テーマ クラスに選択ロジックを実装することをお勧めします。

于 2013-05-19T07:54:16.433 に答える
0

ここでやろうとしているのは、(アプリケーションが実際のテーマ文字列値を認識する前に) コンパイル時に前処理される Embed メタタグに変数 (swf がコンパイルされた後、実行時に発生) を渡すことです。

2つの解決策があります。各テーマごとに新しい swf ファイル。テーマのリソースを変数ではなく定数として定義します。

[Embed(source = 'path/to/resource')]

1 つの swf を使用する場合は、アプリケーションの設計を再考し、実行時にテーマをロードする必要があります。ローダーを初期化し、リソースをフェッチし、Themeそのリソースから新しいものを作成してから、実際のゲーム コードを開始します。

class Theme extends EventDispatcher {

   public static const THEME_READY = 'themeReady';

   private resource:Bitmap;

   public function Theme(resourceUri:String) {
      loadResource(resourceUri);
   }
   private function loadResource(path:String):void {
      var loader:URLLoader = new URLLoader(new URLRequest(path));
      loader.addEventListener(Event.COMPLETE, onResourceLoaded);
   }
   private function onResourceLoaded(e:Event):void {
      e.target.removeEventListener(Event.COMPLeTE, onResourceLoaded);
      this.resource = e.target.content; 
      initialize();
      dispatchEvent(new Event(THEME_READY));
   }
}

ゲームの初期化:

var themeResource:String = 'path/to/resource.jpg';
var theme:Theme = new Theme(themeResource);
theme.addEventListener(Theme.THEME_READY, initializeGame);
于 2013-05-19T07:46:59.080 に答える