0

ビットマップオブジェクトに変換しながら、円形状の中心位置合わせ点、または中心位置合わせを備えた他の表示オブジェクトを維持することは困難であることが証明されています。

次のコードは、円の形状をビットマップオブジェクトに変換し、ステージの中央に配置してから、中央の登録ポイントを削除します。

新しい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回転などを適用すると、登録ポイントが中央ではなく左上隅になっていることが明確に示されます。

中央に登録された表示オブジェクトを、中央に登録されたままビットビットに変換するにはどうすればよいですか?

4

2 に答える 2

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);

または、Flash Professional IDEを使用している場合は、コンテナスプライトを使用する代わりにfl.motion.MatrixTransformer.rotateAroundInternalPointを使用するオプションがあります。

于 2011-03-21T01:11:41.663 に答える
1

次のチュートリアルは、あなたがやろうとしていることのように見えます。

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

于 2011-03-20T12:24:51.570 に答える