2013-04-22 55 views
0

我想用haxe nme來顯示具有alpha通道的圖像與預加載器的flash目標背景。這對於預加載器來說似乎很常見。如何使haxe nme preloader呈現透明度的位圖

我發現了幾種可能的方式來做到這一點,但沒有運氣。 由於我製作了一個繼承默認NMEPreloader的自定義Preloader類,我所有的路徑&錯誤都在這個類中。

方法#1 - nme.Assets方法 - 運行時錯誤

我在預加載的建築工試圖調用Assets.loadBitmapData("assets/img/miniMoon.png")。錯誤發生在運行時:

[Fault] exception, information=ArgumentError: Error #2015: Invalid BitmapData. 

與調用堆棧:

flash.display::BitmapData/ctor 
flash.display::BitmapData 
NME_assets_img_minimoon_png1 at H:\MWHx\export\flash\haxe\ApplicationMain.hx:2053 
Type$/createInstance at C:\Motion-Tween\haxe\std\flash\_std\Type.hx:136 
nme.installer::Assets$/getBitmapData at H:\MWHx\export\flash\haxe\nme\installer\Assets.hx:721 
Preloader at H:\MWHx\source\Preloader.hx:55 
... 

不知nme.Assets類是否已準備好預壓過程中使用。

方法2嵌入在Flash路 - 渲染不透明度

穿透式這不是NME的青睞使用嵌入,我已經試過這樣:

@:bitmap("assets/img/miniMoon.png") class BDmoon extends BitmapData {} 
... 
var moon:Bitmap; 
... 
moon = new Bitmap(new BDmoon(32,32,true,0x00000000)); 

它只是運行,但顯示的圖像沒有透明度,所有帶有alpha 0的像素都會在背景中呈現白色。

作爲進一步的測試,我使用moon.alpha = 0.5;然後我可以看穿圖像。所以也許這是在嵌入nme期間丟失alpha通道值的問題。

帶小動畫或小遊戲的預加載器可以很有趣。我希望有一個解決方案。謝謝!

引用: NME forum topic : Embed Transparent Png Image

回答

0

對不起,但這是我自己的圖像文件的問題!

因爲我不知道如何關閉愚蠢的問題,以新的答案。我在這裏提出一個乾淨的解決方案。

如果你想在preloader中使用圖像,這是我的代碼。根據NME 3.5.5進行測試。

@:bitmap("assets/img/miniMoon.png") class BDmoon extends nme.display.BitmapData{} 

class MyPreloader extends NMEPreloader 
{ 
    public var embedBmp:nme.display.Bitmap; 
    public var bmpFromAssets:nme.display.Bitmap; 

    public function new(){ 
     super(); 

     embedBmp = new nme.display.Bitmap(new BDmoon(64, 64, true)); 
     addChild(embedBmp); 

     // Line below cause problem, nme.Assets not ready in preloader 
     bmpFromAssets = new nme.display.Bitmap(Assets.getBitmapData("assets/img/miniMoon.png")); 
     addChild(bmpFromAssets); 
    } 

    public override function onLoaded() 
    { 
     // dispatchEvent (new Event (Event.COMPLETE)); 
    } 
} 

參見:http://haxeflixel.com/forum/help/nme-355-preloader-flash-error

0

問題是

new BDmoon(32,32,true,0x00000000) 

最後一個0x00000000表示顏色與黑色填充透明區域。將其更改爲

new BDmoon(32,32,true) 

您可以使用Assets類。

Assets.loadBitmapData("img/miniMoon.png") 

即,省略路徑的文件夾assets

+0

第四PARAM 00000000不會爲一個嵌入的位圖實際上很重要。因爲每個像素甚至是圖像文件上的透明0x0都會替換填充顏色。無論哪種方式工作!無論如何。 – 2013-05-06 03:57:09