簡體   English   中英

在AS3中加載嵌入的圖像

[英]Loading an embedded image in AS3

好吧,我覺得愚蠢的問這個,但我花了整整一個下午試圖搞清楚,沒有成功。

在AS3中,我想將一個圖像添加到庫中(讓我們稱之為image.png)並僅使用代碼對其進行實例化。

我成功地以這種方式實例化外部圖像

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

但無論我嘗試什么,我都無法從庫中加載圖像。 怎么做的?

旁白:我已經看過[embed]語法,但理想情況下我想避免硬編碼的圖像名稱,也就是說,我想選擇一個圖像,從而以編程方式生成圖像名稱。

好吧,首先你需要打開庫的屬性窗口並選中“Export to Actionscript”復選框,之后只需在類文本域中對你的對象進行一個很好的引用,對於這個例子,我將它稱為MyImage,好。 現在讓我們來獲取代碼。

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

就是這樣,在這里工作得很好。

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定義設置一個漂亮的包,並讓設計人員使用這些基類來組合圖形和動畫。

如果你已經知道類名是什么,那么對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);

然后你可以正常轉換精靈。

nb MyImage的參數是寬度和高度,但它們對於子類是虛擬的,你可以傳遞任何東西。

根據我的發現,在AS3中,這與以前的版本一樣容易。 一種有效的方法是創建一個MovieClip來保存圖像,然后創建該MovieClip的一個實例並將其添加到舞台上。 另一種方法是為您添加的每個圖像創建一個類,然后實例化該類並將其添加到舞台(其中的步驟位於此處)

必須有更好的方法來做到這一點。 我會繼續搜索。

看起來像這樣:

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)

但是看起來很丑陋而且不必要地復雜。 還有其他方法嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM