我目前正在制作一款带有多种卡片和背景主题的记忆游戏。我已经设法将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
我该如何防止这种情况?
答案 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动态加载(在运行时)作为外部图像。
我建议将每个图像嵌入一个类和一个类。在主题类中实现选择逻辑。