在AS3中,我想将一个图像添加到库中(让我们称之为image.png)并使用代码实例化它。
我成功地以这种方式实例化外部图像
var pLoad:Loader = new Loader();
pLoad.load(new URLRequest("image.png"));
addChild(pLoad);
但无论我尝试什么,我都无法从库中加载图像。怎么做的?
除此之外:我已经看过[embed]语法,但理想情况下我想避免硬编码的图像名称,也就是说,我想选择一个图像,从而以编程方式生成图像名称。
答案 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)
但是,看起来很丑陋和不必要的复杂。还有别的吗?