수색…


비트 맵 데이터에 표시 객체 그리기

개체의 비트 맵 복사본을 만드는 도우미 함수입니다. 벡터 객체, 텍스트 또는 복잡하게 중첩 된 Sprite를 병합 된 비트 맵으로 변환하는 데 사용할 수 있습니다.

function makeBitmapCopy(displayObj:IBitmapDrawable, transparent:Boolean = false, bgColor:uint = 0x00000000, smooth:Boolean = true):Bitmap {

    //create an empty bitmap data that matches the width and height of the object you wish to draw
    var bmd:BitmapData = new BitmapData(displayObj.width, displayObj.height, transparent, bgColor);
            
    //draw the object to the bitmap data
    bmd.draw(displayObj, null, null, null, null, smooth);
            
    //assign that bitmap data to a bitmap object
    var bmp:Bitmap = new Bitmap(bmd, "auto", smooth);
            
    return bmp;
}

용법:

var txt:TextField = new TextField();
txt.text = "Hello There";

var bitmap:Bitmap = makeBitmapCopy(txt, true); //second param true to keep transparency
addChild(bitmap);

등록 포인트 좌표로 표시 객체 그리기

    public function drawDisplayObjectUsingBounds(source:DisplayObject):BitmapData {
        var bitmapData:BitmapData;//declare a BitmapData
        var bounds:Rectangle = source.getBounds(source);//get the source object actual size
        //round bounds to integer pixel values (to aviod 1px stripes left off)
        bounds = new Rectangle(Math.floor(bounds.x), Math.floor(bounds.y), Math.ceil(bounds.width), Math.ceil(bounds.height));

        //to avoid Invalid BitmapData error which occures if width or height is 0
        //(ArgumentError: Error #2015)
        if((bounds.width>0) && (bounds.height>0)){
            //create a BitmapData
            bitmapData = new BitmapData(bounds.width, bounds.height, true, 0x00000000);                
            var matrix:Matrix = new Matrix();//create a transform matrix
            //translate if to fit the upper-left corner of the source
            matrix.translate(-bounds.x, -bounds.y);
            bitmapData.draw(source, matrix);//draw the source
            return bitmapData;//return the result (exit point)
        }
        //if no result is created - return an empty BitmapData
        return new BitmapData(1, 1, true, 0x00000000);
    }

추가 정보 : getBounds() 가 유효한 값을 반환하려면 객체에 적어도 한 번 이상 스테이지 액세스 권한이 있어야합니다. 그렇지 않으면 값이 위조됩니다. 전달 된 source 에 스테이지가 있는지 확인하기 위해 코드를 추가 할 수 있으며, 그렇지 않은 경우 스테이지에 추가 한 다음 다시 제거 할 수 있습니다.

스프라이트 시트 애니메이션하기

정의에 의한 스프라이트 시트는 특정 애니메이션을 포함하는 비트 맵입니다. 오래된 게임은 그리드 타입 스프라이트 시트를 사용합니다. 즉, 모든 프레임이 같은 영역을 차지하고 프레임이 가장자리로 정렬되어 직사각형을 형성합니다. 일부 공간은 비어 있습니다. 나중에 비트 맵 크기를 최소화하기 위해 스프라이트 시트는 각 프레임이 들어있는 직사각형 주위의 여분의 공백을 제거하여 "압축"되기 시작하지만 여전히 각 프레임은 복사 작업을 단순화하기위한 사각형입니다.

스프라이트 시트에 애니메이션을 적용하려면 두 가지 기술을 사용할 수 있습니다. 먼저, BitmapData.copyPixels() 을 사용하여 스프라이트 시트의 특정 영역을 표시된 Bitmap 에 복사하여 애니메이션 문자를 생성 할 수 있습니다. 이 방법은 전체 그림을 호스트하는 표시된 단일 Bitmap 을 사용하는 것이 좋습니다.

var spriteSheet:BitmapData;
var frames:Vector.<Rectangle>; // regions of spriteSheet that represent frames
function displayFrameAt(frame:int,buffer:BitmapData,position:Point):void {
    buffer.copyPixels(spriteSheet,frames[frame],position,null,null,true);
}

두 번째 기술은 표시 목록에 많은 Sprite 또는 Bitmap 있고 동일한 스프라이트 시트를 공유하는 경우 사용할 수 있습니다. 여기에서는 대상 버퍼가 더 이상 단일 객체는 아니지만 각 객체에는 자체 버퍼가 있으므로 적절한 전략은 비트 맵의 bitmapData 속성을 조작하는 것입니다. 그러나 이렇게하기 전에 스프라이트 시트를 개별 프레임으로 분리해야합니다.

public class Stuff extends Bitmap {
    static var spriteSheet:Vector.<BitmapData>;
    function displayFrame(frame:int) {
        this.bitmapData=spriteSheet[frame]; 
    }
    // ...
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow