2011-03-20 3 views
0

원 모양의 중앙 등록 포인트 또는 가운데 등록이있는 다른 표시 객체를 유지하는 것은 어렵습니다.ActionScript - 비트 맵 객체로 변환되는 동안 표시 객체의 중심 등록을 유지 관리하는 동안 비트 맵 데이터 그리기

다음 코드는 원 모양을 비트 맵 객체로 변환하고 스테이지의 중심에 배치 한 다음 그 중심 등록 포인터를 제거합니다.

새로운 bitmapData 객체 (왼쪽 위)의 x 및 y 원점은 원 (가운데)의 x 및 y 원점과 동일하지만 bitmapData.draw의 x 및 y 위치를 변환 할 수 없습니다() - 매개 변수는 너비, 높이, 투명도 및 채우기 색만 허용합니다. 매트릭스 번역의 도움으로

var myCircle:Shape = new Shape(); 
myCircle.graphics.beginFill(0xFF0000, 1.0); 
myCircle.graphics.drawCircie(0, 0, 100); 
myCircle.graphics.endFill(); 

var matrix:Matrix = new Matrix(); 
matrix.tx = myCircle.width/2; 
matrix.ty = myCircle.height/2; 

var myCircleBitmapData:BitmapData = new BitmapData(myCircle.width, myCircle.height, true, 0x00FFFFFF); 
myCircleBitmapData.draw(myCircle, matrix); 

var result:Bitmap = new Bitmap(myCircleBitmapData, PixelSnapping.AUTO, true); 
result.x = stage.stageWidth/2 - matrix.tx; 
result.y = stage.stageHeight/2 - matrix.ty; 

addChild(result); 

, 새로운 비트 맵 객체가 무대 중앙에 나타나지만 등 일반 또는 3D 회전을 적용, 명확하게 등록 포인트는 이제 왼쪽 상단 함을 입증한다 대신에 센터.

센터 등록 된 표시 객체를 센터 등록을 유지하면서 비트 맵으로 변환하려면 어떻게해야합니까?

답변

2

는 가장 일반적인 방법은 단순히 스프라이트 컨테이너의 자식으로 비트 맵을 추가하고 스프라이트 컨테이너가 아닌 비트 맵 자체를 회전하는 것입니다 나타납니다.

var myCircle:Shape = new Shape(); 
myCircle.graphics.beginFill(0xFF0000, 1.0); 
myCircle.graphics.drawCircie(0, 0, 100); 
myCircle.graphics.endFill(); 

var matrix:Matrix = new Matrix(); 
matrix.tx = myCircle.width/2; 
matrix.ty = myCircle.height/2; 

var myCircleBitmapData:BitmapData = new BitmapData(myCircle.width, myCircle.height, true, 0x00FFFFFF); 
myCircleBitmapData.draw(myCircle, matrix); 

var myCircleBitmap:Bitmap = new Bitmap(myCircleBitmapData, PixelSnapping.AUTO, true); 
myCircleBitmap.x -= matrix.tx; 
myCircleBitmap.y -= matrix.ty; 

var circleContainer:Sprite = new Sprite(); 
circleContainer.addChild(myCircleBitmap); 

대안 플래시 프로페셔널 IDE를 사용하는 사람들을 위해 대신 컨테이너 스프라이트를 사용하는 fl.motion.MatrixTransformer.rotateAroundInternalPoint을 사용하는 옵션이 있습니다.

1

다음 튜토리얼은 사용자가하려는 것처럼 보입니다.

http://www.8bitrocket.com/2007/10/30/Actionscript-3-Tutorial-BitmapData-rotation-with-a-matrix/

+0

정확히 ... – TheDarkIn1978

+0

물론, 원리는 유효합니다. 비트 맵을 회전하려면, 컨테이너 객체를 사용하지 않고 (아마도 더 간단 할 것입니다 만, 어쩌면) 행렬을 조작하고, 오프셋 (올바른 중심을 얻기 위해)을 회전시키고, 회전시킨 후 시작점으로 다시 이동해야합니다. 그런 다음 행렬로 객체를 다시 그립니다. – Sam

관련 문제