为什么我会收到此错误

时间:2010-07-06 15:42:10

标签: actionscript-3

我在库上有一个png图像,我通过Properties作为Background类来声明它,它扩展了BitmapData。    当我输入时:
var BMDClass:Class = getDefinitionByName( "Background" ) as Class; 我得到:变量背景没有定义!!    但当我这样做时: trace( getQualifiedClassName( new Background(0,0) ) ); 我明白了:背景!! 我无法弄清楚错误的原因。

1 个答案:

答案 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;
        }
    }
}

使用这些外部类可以让您更好地控制图像的来源。您可以将它们加载到外部,使用嵌入元数据嵌入它们,甚至从舞台加载它们。