graphics.drawPath の練習(6) graphics.drawPath を使った作品もどき 1 ステージクリックで変形 @author Yoshida, Akio Aquioux forked:2favorite:2lines:84license : MIT License modified : 2009-06-02 21:33:28 Embed Tweet package { import flash.display.Shape; import flash.display.Sprite; import flash.display.GraphicsPathCommand; import flash.events.Event; import flash.events.MouseEvent; import flash.geom.Point; import caurina.transitions.Tweener; [SWF(width = "465", height = "465", frameRate = "60", backgroundColor = "#FFFFFF")] /** * graphics.drawPath を使った作品もどき 1 * ステージクリックで変形 * @author Yoshida, Akio */ public class Main extends Sprite { private var canvasShape:Shape; // キャンバス private var commandVector:Vector.<int>; // drawPath の第1引数 private var dataVector:Vector.<Number>; // drawPath の第2引数 private var coordinateVector:Vector.<Coordinate>; // Tweener 用 private const NUM_OF_ANCHOR:uint = 13; // アンカー数 public function Main() { mouseChildren = false; init(); stage.addEventListener(MouseEvent.CLICK, clickHandler); clickHandler(null); addEventListener(Event.ENTER_FRAME, enterFrameHandler); } // 初期化 private function init():void { // キャンバス生成 canvasShape = new Shape(); addChild(canvasShape); // drawPath 第1引数 // 線にとって閉じた図形にするため、線の数はアンカーの数と等しい var num:uint = NUM_OF_ANCHOR; commandVector = new Vector.<int>(num, true); // commandVector の要素を定義 commandVector[0] = GraphicsPathCommand.MOVE_TO; for (var i:uint = 1; i < num; i++) { commandVector[i] = GraphicsPathCommand.LINE_TO; } // drawPath 第2引数 // X,Y 座標なので、数はアンカー数の二倍 num = NUM_OF_ANCHOR * 2; dataVector = new Vector.<Number>(num, true); coordinateVector = new Vector.<Coordinate>(num, true); // coordinateVector の要素を初期化 for (i = 0; i < num; i++) { coordinateVector[i] = new Coordinate(); coordinateVector[i].value = stage.stageWidth / 2; } } // マウスクリックハンドラ private function clickHandler(event:MouseEvent):void { var w:uint = stage.stageWidth; var h:uint = stage.stageHeight; var margin:uint = 25; var num:uint = NUM_OF_ANCHOR; for (var i:uint = 0; i < num; i++) { var idxX:uint = i * 2; var idxY:uint = i * 2 + 1; var coordinateX:Coordinate = coordinateVector[idxX]; var coordinateY:Coordinate = coordinateVector[idxY]; var valueX:Number = Math.random() * (w - margin * 2) + margin; var valueY:Number = Math.random() * (h - margin * 2) + margin; Tweener.addTween(coordinateX, { value:valueX, time:2.5, delay:idxX * 0.02, transition:"easeOutElastic" }); Tweener.addTween(coordinateY, { value:valueY, time:2.5, delay:idxY * 0.02, transition:"easeOutElastic" }); } } // ENTE_FRAME ハンドラ private function enterFrameHandler(e:Event):void { draw(); } // 描画 private function draw():void { // dataVector 定義 var num:uint = NUM_OF_ANCHOR * 2; for (var i:uint = 0; i < num; i++) { dataVector[i] = coordinateVector[i].value; } // 描画 canvasShape.graphics.clear(); canvasShape.graphics.beginFill(0xFF6699, 1); canvasShape.graphics.drawPath(commandVector, dataVector); canvasShape.graphics.endFill(); } } } class Coordinate { public var value:Number = 0.0; public function Coordinate() {} } Code Fullscreen Preview Fullscreen anvide24 takishiki drawPath GraphicsPathCommand.MOVE_TO Tweener.init GraphicsPathCommand.LINE_TO Tweener.addTween time MouseEvent.ENTER_FRAME MouseEvent.CLICK MouseEvent Vector uint Math.random int Number sort new page view favorite forked pv279 forked from: graphics.drawPath.. hacker_xe9jqx6h forked:0 favorite:0lines:84 (diff:1) pv1487 graphics.drawPath の練習(7) Aquioux forked:3 favorite:0lines:99 (diff:34) tag: drawPath