2013-04-22 2 views
0

haxe nme를 사용하여 플래시 타겟에 대한 프리 로더의 배경 위에 알파 채널로 이미지를 표시하고 싶습니다. 이러한 필요성은 프리 로더 (preloader)와 관련하여 일반적으로 보입니다.haxe nme 프리 로더 렌더링 방법 투명도 비트 맵

내가 할 수있는 여러 가지 방법이 있지만 그 중 하나에 행운을 가져다줍니다. 기본 NMEPreloader를 상속 한 사용자 정의 Preloader 클래스를 만들 때 모든 내 흔적 &의 오류가이 클래스에 있습니다.

방법 # 1 - nme.Assets 접근 - 런타임 오류

나는 프리 로더의 constructer에 전화 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 삽입 투명성

가 삽입을 사용하는 NME의 찬성이 아니다 Throuth없이 렌더링,이 시도 :

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

그냥 실행을하지만 이미지가 표시 투명도가 없으면 알파 0을 가진 모든 픽셀이 배경에 대해 흰색으로 렌더링됩니다.

추가 테스트로 나는 이미지를 통해 볼 수있는 moon.alpha = 0.5;을 사용합니다. 그래서 이것은 nme에 임베딩하는 동안 알파 채널 값을 잃어 버리는 문제입니다.

작은 애니메이션이나 작은 게임이있는 프리 로더는 재미있을 수 있습니다. 나는 이것을위한 해결책이 있기를 바랍니다. 감사!

참조 : 가 NME forum topic : Embed Transparent Png Image

답변

0

죄송합니다.하지만 내 자신의 이미지 파일의 문제입니다!

나는 새로운 대답에 어리석은 질문을 어떻게 닫을 지 모르겠다. 나는 여기에 깨끗한 해결책을 제시했다.

프리 로더에서 이미지를 사용하려면 여기를 클릭하십시오. 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을 0x00000000 실제로 삽입 비트 맵에 대해 중요하지 않다. 왜냐하면 이미지 파일의 투명 픽셀 0x0조차도 모든 단일 픽셀이 채우기 색상을 대체하기 때문입니다. 어느 쪽이든 작동합니다! 어쨌든. –