‘as3’ タグのついている投稿
「AS3で半径小さい円を描いて拡大したらつぶれていて~」の原因を検証
2009 年 1 月 2 日 金曜日 by key先日nitoyonさんの AS3で半径小さい円を描いて拡大したらいびつになってる にコメント書かせてもらったのですが、推測のままだったので検証してみました。
「drawCircle内部で行われている描画の各座標が1twipで丸められている」という仮説なので、drawCircleのコードを見て丸めてやれば良いのでは…と思ったんですがdrawCircleのコードが見れないですね。はいはい書きます書きます。
- /**
- * flash.display.Graphics#drawCircle再実装
- * コードは推測。でも合っているっぽい
- */
- private function drawCircle(graphics:Graphics, x:Number, y:Number, radius:Number):void {
- var cradius:Number = radius * CONTROLPOINT_RADIUS;
- graphics.moveTo(x + radius, y);
- for (var i:uint=0; i<8; i++) {
- var ca:Number = (i + 0.5) / 8 * Math.PI * 2;
- var aa:Number = (i + 1) / 8 * Math.PI * 2;
- graphics.curveTo(
- x + Math.cos(ca) * cradius, y + Math.sin(ca) * cradius,
- x + Math.cos(aa) * radius, y + Math.sin(aa) * radius
- );
- }
- }
この内部で使われているmoveToとcurveToに渡す座標を、拡大後の0.05pixelに相当する大きさで丸めて同じ表示になれば成功。
コード全体と結果はwonderflで。