이미지가 있습니다. mySprite.png. 이미지는 32x32 픽셀 스프라이트의 5x5 격자입니다. 이 이미지는 프로젝트의 라이브러리에로드되었습니다.AS3 스프라이트 시트
클래스 내에 render() 함수가 있다고 가정하면이 클래스는이 스프라이트 시트 리소스에서 단일 스프라이트로 어떻게 그려 집니까?
이미지가 있습니다. mySprite.png. 이미지는 32x32 픽셀 스프라이트의 5x5 격자입니다. 이 이미지는 프로젝트의 라이브러리에로드되었습니다.AS3 스프라이트 시트
클래스 내에 render() 함수가 있다고 가정하면이 클래스는이 스프라이트 시트 리소스에서 단일 스프라이트로 어떻게 그려 집니까?
간단한 대답은 BitmapData.copyPixels()을 사용하여 원본 스프라이트 시트의 작은 섹션 만 화면에 실제로 표시되는 스프라이트로 복사하는 것입니다.
뭔가 같은 :
private function DrawSpriteIndex(displayBitmap:Bitmap, spriteSheet:Bitmap, spriteIndex:int):void {
var spriteW:int = 32;
var spriteH:int = 32;
var sheetW:int = 5;
displayBitmap.bitmapData.copyPixels(spriteSheet.bitmapData,
new Rectangle((spriteIndex % sheetW) * spriteW, Math.floor(spriteIndex/sheetW) * spriteH, 32, 32),
new Point(0,0)
);
}
당신은 도움이 링크를 찾을 수 있습니다 - 그들이 나를 도와 나는이 학습 할 때 :
또 다른 가능한 방법은 32x32 마스크를 시트 위에 놓고 시트를 움직이는 것입니다.
이 (의사 코드) 같은 것을 작동합니다 :
var spriteMask:Sprite = new Sprite();
spriteMask.graphics.drawRect(0,0,32,32);
spriteSheetContainer.mask = spriteMask;
function render():void { // this function is on the container of the sprite sheet (spriteSheetContainer in this example)
// run offsetX & Y iteration logic. I would assume something that uses a frame counter, modulus, and the sprite layout grid dimensions
_spriteSheet.x = offsetX; // move the sprite around under the mask
_spriteSheet.y = offsetY;
}
그것은 당신이 스프라이트 시트를 이동할 수 있도록하는 스프라이트 시트의 용기가 아닌 스프라이트 시트 자체에 마스크를 가지고 결정적 마스크와 독립적입니다.
플래시 플레이어는 여전히 전체 이미지를 그리기 때문에이 작업을 수행하는 데있어 상당한 성능 저하가 있습니다. 그것을보십시오. –
3 개의 링크가 작동하지 않습니다. –
사용 http://web.archive.org/ –