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