2013-02-22 4 views
0

내가 예를 들어 내가 사용 FFFF00FF (불투명 마젠타)로 설정 일부 32 비트의 BitmapData에 fillRects (즉, 투명성 = 사실과 배경색을 사용하려고 해요 :.AS3의 BitmapData fillRect 할 예상대로 작동하지

fillRect(rect, 0xFF0000FF); 
예상대로

이는 불투명 파란색하는 구형을 그릴 것입니다,하지만 ...이, 오른쪽 반투명 블루 RECT을 그릴해야

fillRect(rect, 0x550000FF); 

?하지만 그 대신 나는 것처럼 다크 블루 RECT 받고 있어요 파란색은 검정색과 섞여있다. (배경은 마젠타 색이다. 기억해라. 기본 마젠타?).

색상 값을 0x000000FF로 설정하면 기본 마젠타 색을 100 %로 지정해야하지만 대신 100 % 검정색을 얻게됩니다.

BitmapData는 32 비트 ARGB로 생성되었으므로 여기에 무슨 문제가 있는지 궁금합니다.

기본 AS3 동작으로 보입니까? 내가 설명한 것처럼 실제로 동작하는 작은 테스트 클래스 ...

package 
{ 
    import flash.display.Bitmap; 
    import flash.display.BitmapData; 
    import flash.display.Sprite; 
    import flash.geom.Rectangle; 


    public class Main extends Sprite 
    { 
     public function Main() 
     { 
      stage.color = 0x000000; 
      var bd:BitmapData = new BitmapData(400, 300, true, 0xFFFF00FF); 
      var b:Bitmap = new Bitmap(bd); 
      addChild(b); 

      bd.fillRect(new Rectangle(0, 0, 200, 200), 0x000000FF); 
     } 
    } 
} 

을 만든 후 당신은 fillRect 할로 그린 RECT는 마젠타 것 기대하지만 분명히 스테이지의 BG 색상을합니다. 이제 내 질문 :

원하는 효과를 얻을 수있는 방법이 있나요? (fillRect 알파는 플래시 스테이지가 아닌 비트 맵 데이터의 bg 색상에 적용됩니다)?

답변

2

당신의 문제는 fillRect가 포토샵에서 반투명의 사각형을 그릴 수있는 도구와 같다고 생각하면 자동으로 블렌드됩니다.

아니요, fillRect는 지정된 사각형 영역의 모든 비트 맵 픽셀을 지정된 색상으로 설정합니다.

원하는 크기와 색상의 반투명 비트 맵을 만든 다음 예를 들어을 사용하여 작업 비트 맵 (캔버스)과 병합하면됩니다. 이 간략화 된 예에서와 같이 방법을 그린다

var whiteTransparent:BitmapData = new BitmapData(100, 100, true, 0x80FFffFF); 
var blackCanvas:BitmapData = new BitmapData(400, 400, false, 0); 

var canvas:Bitmap = new Bitmap(blackCanvas); 

addChild(canvas); 

blackCanvas.draw(whiteTransparent); 

안부

+0

추신 draw 메소드는 더 많은 옵션을 사용할 수 있습니다. :) 그러나 여러분이해야 할 일에 대한 아주 간단한 예제였습니다. –

+0

힌트를 보내 주셔서 감사합니다! 그래, 그리기 방법은 훨씬 더 많은 일을 할 수 있지만 훨씬 더 느립니다. 이 코드는 빠른 스크롤링 게임에 사용되므로 draw()를 사용하지 않는 것이 좋습니다. – BadmintonCat

+0

Draw() 대신 copyPixels()을 사용하는 것이 좋습니다. –