我在库上有一个png图像,我通过Properties作为Background类来声明它,它扩展了BitmapData。
当我输入时:
var BMDClass:Class = getDefinitionByName( "Background" ) as Class;
我得到:变量背景没有定义!!
但当我这样做时:
trace( getQualifiedClassName( new Background(0,0) ) );
我明白了:背景!!
我无法弄清楚错误的原因。
答案 0 :(得分:1)
我相信这是因为在实际按名称获取定义之前,您需要引用Background类。简单地导入Background类不会将类编译到swf中,您需要以某种方式引用它。创建类的实例是一种方法,但是您也可以在导入后引用该类。
尝试类似......import com.somedomain.Background;
Background;
这应该创建对您的类的引用,并确保它被编译到您的swf。
编辑以显示多个课程用法。
如果你有多个后台课程,我建议你尝试让它们遵循一个界面。然后我还会创建一个后台工厂类,允许您从配置文件中创建后台实例。这也意味着您可以将所有引用放在工厂类中的后台类中。这是工厂的样子。
// let the compiler know we need these background classes
import com.somedomain.backgrounds.*;
DarkBackground;
LightBackground;
ImageBackground;
class BackgroundFactory
{
public function create(type:String):Background
{
var bgClass:Class = getDefinitionByName(type) as Class;
return new bgClass();
}
}
然后从配置中获取后台实例,你会做类似......
的事情// parse your config file...not sure what format you've got it in.
// instantiate a background factory and create an instance based on the name from your config.
var bgFactory:BackgroundFactory = new BackgroundFactory();
var bg:Background = bgFactory.create(someStr);
编辑以扩展示例
package com.somedomain.background
{
interface Background
{
function get img():Bitmap;
}
}
package com.somedomain.background
{
class SomeImageBackground extends Sprite implements Background
{
protected var _img:Bitmap;
public function SomeImageBackground():void
{
_img = new SomeAssetFromLibrary();
}
public function get img():Bitmap
{
return _img;
}
}
}
使用这些外部类可以让您更好地控制图像的来源。您可以将它们加载到外部,使用嵌入元数据嵌入它们,甚至从舞台加载它们。