2008年12月30日
AS3で半径小さい円を描いて拡大したらいびつになってる
題のまま。1×1の範囲に図形を描画して、あとで倍率変更してステージ全体に広げるコードを書いていたらうまく描画されずに悩んでしまった。
円を描画するのはそこそこコストがかかる処理なので、半径が小さいときにはパス数を減らす最適化をしているんだろう。
(追記)Flash 内部で 1/20 ピクセル以下の座標は切り捨てられているらしい。コメント欄で教えてもらいました。ありがとうございます。
適度に 100×100 などの領域に描画するのがよさそう。逆に、1000×1000のような領域に図形を描画してから縮小して使うと、描画効率が悪くなると予想される。
以下、実証コード。wonderfl にも置いた。
package{ import flash.display.Sprite; public class GunyaGunya extends Sprite{ public function GunyaGunya(){ var s:Sprite = new Sprite(); s.graphics.beginFill(0xff0000); s.graphics.drawCircle(0, 0, 0.1); s.graphics.endFill(); s.scaleX = s.scaleY = 200; s.x = s.y = 100; addChild(s); s = new Sprite(); s.graphics.beginFill(0x0000ff); s.graphics.drawCircle(0, 0, 0.2); s.graphics.endFill(); s.scaleX = s.scaleY = 100; s.x = s.y = 200; addChild(s); s = new Sprite(); s.graphics.beginFill(0x006600); s.graphics.drawCircle(0, 0, 0.25); s.graphics.endFill(); s.scaleX = s.scaleY = 100; s.x = 240; s.y = 80; addChild(s); } } }