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 创建了一个新的 Theme 对象,该字符串是图片的源,然后使用该字符串源通过将其放入 Embed 源中来制作图片,但我得到了这些错误留言:

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

我怎样才能防止这种情况?

4

2 回答 2

0

我认为那行不通。

在 Flash 中,您可以使用以下命令嵌入图像:

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

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

我建议将每个图像作为一个类嵌入并在您的主题类中实现选择逻辑。

于 2013-05-19T07:54:16.433 回答
0

您在这里尝试做的是将一个变量(在运行时发生,在编译 swf 之后)传递给在编译时预处理的 Embed 元标记(在应用程序知道实际的主题字符串值之前)。

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

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

如果您想使用一个 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 回答