2013-06-13 28 views
1

在其他平臺上,我可以使用像[Embed(source =「logo.gif」)]或@:bitmap之類的東西,但似乎沒有Windows /其他Cpp平臺。在部署到Windows時嵌入和讀取圖像資產

我試圖使用EmbedAssets庫,但它已過時。

我也試過使用nmml文件資源標籤。有了這個我可以得到圖像haxe.sys.io.Bytes,但使用我需要將haxe.sys.io.Bytes轉換爲nme.utils.ByteArray。我還沒有找到辦法做到這一點。

那麼,我能做些什麼來在部署到Windows時將圖像嵌入到haxe/nme項目中?

回答

4

除了openfl.Assets,OpenFL支持@:bitmap@:sound@:font@:file嵌入標籤。

前者需要<assets path="to/assets" />在您的項目XML文件中,並在Windows上將文件複製到您的可執行文件旁邊。

嵌入標籤要求您的資產文件基於其嵌入方式位於源路徑中,因此在項目文件中使用<source path="to/assets" />

下面是一個使用@:bitmap標籤的例子:

package; 


import flash.display.Bitmap; 
import flash.display.BitmapData; 
import flash.display.Sprite; 

@:bitmap("nme.png") class Image extends BitmapData {} 


class Main extends Sprite { 


    public function new() { 

     super(); 

     var bitmap = new Bitmap (new Image (0, 0)); 
     addChild (bitmap); 

     bitmap.x = (stage.stageWidth - bitmap.width)/2; 
     bitmap.y = (stage.stageHeight - bitmap.height)/2; 

    } 


} 

使用嵌入標籤,該資產將是您的可執行文件中。

+0

謝謝!我從NME遷移到OpenFL來做到這一點,我不能對結果感到滿意。另一個快速提示:我怎樣才能禁用Alt + Enter功能? –

+0

我將如何使用@:file來嵌入swf庫?你能否在上面的答案中添加一個例子?謝謝 – simo

0

使用NME或OpenFL,您應該能夠調用Assets.getBitmapData("assets/myImg.png");而不需要將資產添加到NMML文件(儘管您可能需要添加<assets path="Assets" rename="assets"/>或重命名資產目錄)。然後,您應該能夠將此bitmapData添加到顯示列表上的位圖對象。

例如:

var bd:BitmapData = Assets.getBitmapData("assets/myImg.png"); 
var bitmap:Bitmap = new Bitmap(bd); 
addChild(bitmap); 
+0

我做到了,文件仍然與可執行文件一起被複制。 –