可变嵌入式源AS3

时间:2013-05-19 07:15:27

标签: actionscript-3

我目前正在制作一款带有多种卡片和背景主题的记忆游戏。我已经设法将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

我该如何防止这种情况?

2 个答案:

答案 0 :(得分:0)

你在这里要做的是将一个变量(在运行时,在编译swf之后)发送到Embed metatag,它在编译时被预处理(在应用程序知道实际的主题字符串值之前)。

有两种解决方案。每个主题都有一个新的swf文件。您将主题的资源定义为常量,而不是变量:

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

如果要使用一个swf,则必须重新考虑应用程序设计并在运行时加载主题,方法是初始化加载器,获取资源,从该资源创建新的Theme,然后启动实际的游戏代码。 / p>

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);

答案 1 :(得分:0)

我认为这不会起作用。

在闪光灯中,您可以使用以下颜色嵌入图像:

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

或者可以使用loader动态加载(在运行时)作为外部图像。

我建议将每个图像嵌入一个类和一个类。在主题类中实现选择逻辑。