In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

リボン作ってみようと思ったけど失敗

...
@author oreore

graphic.drawPath 使えばいけるかと思ったけど
 やっぱり無理だった。。。。
何かよい方法なないでしょうか?
Get Adobe Flash player
by oreore 03 Apr 2010
/**
 * Copyright oreore ( http://wonderfl.net/user/oreore )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/wCbP
 */

package 
{
	import flash.display.*;
	import flash.events.*;
	
	/**
	 * ...
	 * @author oreore
	 */
	/*
	* graphic.drawPath 使えばいけるかと思ったけど
	* やっぱり無理だった。。。。
	* 何かよい方法なないでしょうか?
	*/
	public class Main extends Sprite 
	{
		private var a:Array;
		private var ballArray:Array;
		private var ballArray2:Array;
		private var s:Shape;
		private const BALL_NUM:int = 51;
		private const BALL_NUM2:int = 49;
		private var flag:int = 1;
		
		public function Main():void 
		{
			if (stage) init();
			else addEventListener(Event.ADDED_TO_STAGE, init);
		}
		
		private function init(e:Event = null):void 
		{
			removeEventListener(Event.ADDED_TO_STAGE, init);
			// entry point
			stage.align = StageAlign.TOP_LEFT;
			stage.scaleMode = StageScaleMode.NO_SCALE;
			var stageH:Number = stage.stageHeight;
			var stageW:Number = stage.stageWidth;
			var stageH2:Number = stage.stageHeight *.5;
			var stageW2:Number = stage.stageWidth *.5;
			
			
			_commands = new Vector.<int>();
			_data = new Vector.<Number>();
			
			s = new Shape();
			addChild(s);
			a = [];
			ballArray = [];
			ballArray2 = [];
			ballArray3 = [];
			for (var i:int = 0; i < BALL_NUM; i++) 
			{
				//var obj:Object = new Object();
				a[i] = new Ball(3, 0xff0000);;
				a[i].x = Math.random() * stageW;
				a[i].y = Math.random() * stageH;
				var ball:Ball = new Ball(2, 0xff0000);
				var ball2:Ball = new Ball(2, 0x000000);
				var ball3:Ball = new Ball(3, 0x0000ff);
				
				ballArray[i] = ball;
				ballArray2[i] = ball2;
				ballArray3[i] = ball3;
			}
			
			var n:int = BALL_NUM * 2;
			_commands[0] = 1;
			for (i = 1; i < n; i++) 
			{
				if (i == BALL_NUM - 1)
				{
					_commands[i] = 2;
				}else if (i == n - 1) {
					_commands[i] = 2;
				}else {
					_commands[i] = 3;
				}
				
			}
			_commands[i] = 2;
			
			lineDraw();
			
			
			//stage.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
			//stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
			addEventListener(Event.ENTER_FRAME, onLoop);
			
			
			_fillFlag = GraphicsPathWinding.NON_ZERO;
			//stage.addEventListener(MouseEvent.CLICK, onClikc);
			
		}
		
		private function onClikc(e:MouseEvent):void 
		{
			flag = flag ^ 3;
			trace(flag);
			if (flag == 1) {
				_fillFlag = GraphicsPathWinding.NON_ZERO;
			}else {
				_fillFlag = GraphicsPathWinding.EVEN_ODD;
			}
			
		}
		
		private function onMouseUp(e:Event):void 
		{
			
			if (e.target is Ball) {
				e.target.stopDrag();
			}
		}
		
		private function onMouseDown(e:MouseEvent):void 
		{
			trace(e.target is Ball);
			if (e.target is Ball) {
				
				trace(e.target);
				e.target.startDrag();
				e.target.x = mouseX;
				e.target.y = mouseY;
			}
			
		}
		private var vx:Number = 0;
		private var vy:Number = 0;
		private var spring:Number = 0.03;
		private var furiction:Number = 0.83;
		private var ballArray3:Array;
		private var _data:Vector.<Number>;
		private var _commands:Vector.<int>;
		private var _fillFlag:String;
		
		private function onLoop(e:Event):void 
		{
			vx = mouseX;
			vy = mouseY;
			
			
			a[0].x = vx;
			a[0].y = vy;
			for (var i:int = 1; i < BALL_NUM; i++) 
			{
				var dx:Number = a[i - 1].x - a[i].x;
				var dy:Number = a[i - 1].y - a[i].y;
				var ax:Number = dx * spring;
				var ay:Number = dy * spring;
				a[i].vx += ax;
				a[i].vy += ay;
				a[i].vx *= furiction;
				a[i].vy *= furiction;
				a[i].x += a[i].vx;
				a[i].y += a[i].vy;
			}
			
			lineDraw();
			
			if (Math.abs(ax) < 0.001) {
				for (i = 1; i <BALL_NUM ; i++) 
				{
					a[i].x = Math.random()*stage.stageWidth;
					a[i].y = Math.random()*stage.stageHeight;
				}
			}
			
			
		}
		
		
		private function lineDraw():void
		{
			_data = new Vector.<Number>();
			graphics.clear();
			s.graphics.clear();
			graphics.beginFill(0x000000);
			
			_data.push(a[0].x);
			_data.push(a[0].y);
			
			ballArray[0].x = a[0].x;
			ballArray[0].y = a[0].y;
			
			
			for (var i:int = 1; i < BALL_NUM2; i++) 
			{
				var xc:Number = (a[i].x +a[i + 1].x) * .5;
				var yc:Number = (a[i].y +a[i + 1].y) * .5;
				
				ballArray[i].x = a[i].x;
				ballArray[i].y = a[i].y;
				ballArray2[i].x = xc;
				ballArray2[i].y = yc;
				
				_data.push(a[i].x);
				_data.push(a[i].y);
				_data.push(xc);
				_data.push(yc);
			}
			
			
			
			_data.push(a[i].x);
			_data.push(a[i].y);
			_data.push(a[i + 1].x);
			_data.push(a[i + 1].y);
			
			ballArray[i].x = a[i].x;
			ballArray[i].y = a[i].y;
			
			_data.push(a[i + 1].x + 10);
			_data.push(a[i + 1].y + 10);
			
			for (i = BALL_NUM2; i >= 1; i--) 
			{
				xc = (a[i].x +a[i - 1].x+20) * .5;
				yc = (a[i].y+a[i - 1].y + 20) * .5;
				ballArray3[i].x = xc;
				ballArray3[i].y = yc;
				
				_data.push(a[i].x + 10);
				_data.push(a[i].y + 10);
				_data.push(xc);
				_data.push(yc);
				
			}
			
			_data.push(a[i].x + 10);
			_data.push(a[i].y + 10);
			_data.push(a[i].x);
			_data.push(a[i].y);
			
			
			graphics.drawPath(_commands,_data, _fillFlag);
			graphics.endFill();
			_data = null;
		}
		
		
	}
	
}

	import flash.display.Sprite;
	
	class Ball extends Sprite{
		public var radius:Number;
		public var color:uint;
		public var vx:Number = 0;
		public var vy:Number = 0;
		public var oldX:Number = 0;
		public var oldY:Number = 0;
		public var ax:Number = 0;
		public var ay:Number = 0;
		public var mass:Number = 0;
		private var _alpha:Number = 1;
		
		public function Ball(radius:Number = 40, color:uint = 0xff6633,alphaNumber:Number= 1){
			this.radius = radius;
			this.color = color;
			this._alpha= alphaNumber
			init();
		}
		
		private function init():void{
			graphics.beginFill(color,_alpha);
			graphics.drawCircle(0,0,radius);
			graphics.endFill();
		}
		
		public function fillColor(value:uint):void
		{
			graphics.beginFill(value);
			graphics.drawCircle(0,0,radius);
			graphics.endFill();
		}
	}