/** * 線で円を描画する * http://d.hatena.ne.jp/ActionScript/20090414/as3_line_circle * 画面をクリックすると、クリックした座標を中心にした円が線で描かれます。 * * こちらのコードを参考にさせていただきました。 * http://moringo.moo.jp/wordpress/?p=67 */ package { import caurina.transitions.Tweener; import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.text.TextField; import flash.text.TextFieldAutoSize; import flash.text.TextFormat; [SWF(width = 465, height = 465, backgroundColor = 0x000000, frameRate = 30)] public class Circle extends Sprite { private var _scx:Number = stage.stageWidth * 0.5; // ステージ中央のX座標 private var _scy:Number = stage.stageHeight * 0.5; // ステージ中央のY座標 private var _txtfld:TextField; public function Circle():void { setup(); } private function setup():void { var txtfmt:TextFormat = new TextFormat("_ゴシック", 9, 0xFFFFFF); _txtfld = new TextField(); _txtfld.defaultTextFormat = txtfmt; _txtfld.autoSize = TextFieldAutoSize.LEFT; _txtfld.text = "画面をクリックすると、クリックした座標を中心にした円が線で描かれます。"; _txtfld.x = _scx - _txtfld.width * 0.5; _txtfld.y = _scy - _txtfld.height * 0.5; _txtfld.selectable = false; _txtfld.name = "text"; this.stage.addChildAt(_txtfld, 0); this.stage.addEventListener(MouseEvent.CLICK, function(event:MouseEvent):void { stage.removeEventListener(MouseEvent.CLICK, arguments.callee); Tweener.addTween(_txtfld, { alpha:0, time:3, delay:0, transition:"easeOutExpo", onComplete:function():void { stage.removeChild(_txtfld); }}); }); this.stage.addEventListener(MouseEvent.CLICK, mouseClickHandler); } private function mouseClickHandler(event:MouseEvent):void { // 円のスプライト作成 var sp:Sprite = new Sprite(); this.stage.addChild(sp); draw(sp, mouseX, mouseY); } private function draw(sp:Sprite, cx:Number, cy:Number):void { var radius:Number = 200 * Math.random() + 10; // 半径をランダム var angle:Number = -90 * Math.PI / 180; // 開始角度(をラジアンで) var max:Number = 2 * Math.PI + angle; // 終了角度(をラジアンで) var fx:Function = function(r:Number, t:Number, x:Number):Number { return r * Math.cos(t) + x }; var fy:Function = function(r:Number, t:Number, y:Number):Number { return r * Math.sin(t) + y }; sp.graphics.lineStyle(radius * 0.1, 0xFFFFFF * Math.random()); // 線の太さは半径に比例、色はランダム sp.graphics.moveTo(fx(radius, angle, cx), fy(radius, angle, cy)); // 線描画の開始点 // 線を描画する無名関数 sp.addEventListener(Event.ENTER_FRAME, function(event:Event):void { angle += 0.05; // 約2.9度ずつ回転 = 線を描画 sp.graphics.lineTo(fx(radius, angle, cx), fy(radius, angle, cy)); if (angle >= max) { sp.removeEventListener(Event.ENTER_FRAME, arguments.callee); Tweener.addTween(sp, { alpha:0, time:2, transition:"easeInExpo", onComplete:function():void { stage.removeChild(sp); }}); } }); } } } 線で円を描画する