在AS3中加载嵌入的图像

时间:2009-08-26 20:22:26

标签: flash actionscript-3

好吧,我觉得这个问题很愚蠢,但我花了整整一个下午试图解决这个问题,但没有成功。

在AS3中,我想将一个图像添加到库中(让我们称之为image.png)并使用代码实例化它。

我成功地以这种方式实例化外部图像

var pLoad:Loader = new Loader();
pLoad.load(new URLRequest("image.png"));
addChild(pLoad);

但无论我尝试什么,我都无法从库中加载图像。怎么做的?

除此之外:我已经看过[embed]语法,但理想情况下我想避免硬编码的图像名称,也就是说,我想选择一个图像,从而以编程方式生成图像名称。

5 个答案:

答案 0 :(得分:5)

好吧,首先你需要打开库的属性窗口并检查“导出到Actionscript”复选框,之后只是在类文本字段中对你的对象进行了很好的引用,对于这个例子,我将调用它是MyImage,好的。现在让我们来看看代码。

var ImageClass:Class = getDefinitionByName("MyImage") as Class;
var image:Bitmap = new Bitmap(new ImageClass(575,430));
addChild(image);

就是这样,在这里工作得很好。

答案 1 :(得分:3)

Flash库非常神秘,但如果使用得当,它可以是设置Flash工作流程的一种很好的方式......我将尝试澄清所有这些:

带有“Export for ActionScript”选项的库符号实际上是作为类编译的。如果没有具有相同类名的类文件,Flash将在编译中创建一个与您在“类”字段中声明的名称相同的名称。这意味着,在你的情况下,如果类的名称是“image.png”,它实际上会在“image”包中创建一个“png”类,扩展BitmapData(当然,给它另一个类名更明智,比较proyect.library.MyImage)...这意味着你不需要getDefinitionByName,只需像实现任何其他类那样实例化它:

import image.png;
var bmd:BitmapData = new png(0,0); //the dimensions are irrelevant but necessary

然后你需要一个Bitmap实例才能将它添加到displayList:

var bitmap:Bitmap = new Bitmap(bmd,"auto", true); //see the docs for the las two args
addChild(bitmap);
//Bitmap is a DisplayObject, so you can apply transformations to it as with any Sprite or MovieClip.

所有这些都适用于任何库符号(图形除外)...让我们说“导出AS”声音符号为“project.library.MySound”,然后你可以这样做:

import proyect.library.MySound;
var sound:Sound = new MySound();
sound.start();

如果您的类文件与库的符号同名,Flash将尝试使用它(如果它继承了默认的基类)。 您会注意到所有这些符号都具有可编辑的基类字段。你也可以在那里设置一个自定义类,只要它是inherts默认基类...在位图中它是flash.display.BitmapData,声音是flash.media.Sound,字体是flash.text.Font,movieclips是flash .display.MovieClip等... 对于MovieClip,只要你没有框架,你也可以从Sprite继承。

所有这一切虽然听起来有些神秘,但如果应用得当,可以为使用Flash的设计人员和开发人员带来相当舒适的工作流程。例如,您可以使用整个UI定义设置一个漂亮的包,并让设计人员使用这些基类来组合图形和动画。

答案 2 :(得分:2)

如果您已经知道类名是什么,那么对ruyadorno方式的改进就是:

var image:Bitmap = new Bitmap(new MyImage(0, 0));
addChild(image);

位图可以很容易地放入Sprite:

var image:Bitmap = new Bitmap(new MyImage(0, 0));
var sprite:Sprite = new Sprite;
sprite.addChild(image);
addChild(sprite);

然后你可以正常转换精灵。

n.b。 MyImage的参数是宽度和高度,但它们对于子类是虚拟的,你可以传递任何东西。

答案 3 :(得分:1)

根据我的发现,在AS3中,这与以前的版本一样容易。一种有效的方法是创建一个MovieClip来保存图像,然后创建该MovieClip的一个实例并将其添加到舞台上。另一种方法是为您添加的每个图像创建一个类,然后实例化该类并将其添加到舞台(其中的步骤位于here

必须有更好的方法来做到这一点。我会继续搜索。

答案 4 :(得分:0)

看起来很有效:

var pDef:Class = getDefinitionByName("image.png") as Class;
var _image:BitmapData = new pDef(10, 10);

m_pSprite = new Sprite();           
m_pSprite.graphics.beginBitmapFill(_image);
m_pSprite.graphics.drawRect(0, 0, _image.width, _image.height);
m_pSprite.graphics.endFill();
addChild(m_pSprite)
但是,看起来很丑陋和不必要的复杂。还有别的吗?