2010-07-06 172 views
0

我有,我已经通过属性声明它为延伸的BitmapData背景类库PNG图像。 当我键入:
var BMDClass:Class = getDefinitionByName("Background") as Class; 我得到:变量背景未定义! 但是当我做: trace(getQualifiedClassName(new Background(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; 
     } 
    } 
} 

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

+0

我认为你是对的。我按照你的建议和工作来测试它!但是现在getDefinitionByName的灵活性已经被阻塞了,因为我将不得不实例化这个类,但是我想通过它的名字得到它的实例以便使用配置文件。你能提出一个解决方案吗? – Ponty 2010-07-06 15:58:45

+0

我试着给出一个更深入的答案,你可以如何使用你的配置文件来做到这一点。让我知道它是否合理。 – 2010-07-06 17:07:39

+0

嘿,非常感谢你给我很多想法!我还有一个小问题:你写:import com.somedomain.backgrounds。*;但你如何把你的图像放在那个包里?我的意思是我请使用闪光灯库和图像转换成的BitmapData的用户定义的子类或(之前一点,我发现)的EMBED标签,如[嵌入(源=“image.png”)] 公共Background1:类。 你如何实现在包中包含所有用户定义的图形类? 如果只是我之前告诉过你的类被创建,你如何定义一个接口?使用界面作为标记?能给我看看么? – Ponty 2010-07-06 18:06:20

相关问题