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

多角形作成

正多角形を生成するスクリプトだよ!

ライブラリ部分と使い方は下のほう
上のはテスト用です
Get Adobe Flash player
by lol_lol 15 Feb 2010
/**
 * Copyright lol_lol ( http://wonderfl.net/user/lol_lol )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/dlOL
 */

/*
	正多角形を生成するスクリプトだよ!
	
	ライブラリ部分と使い方は下のほう
	上のはテスト用です
*/
package {
	import flash.display.Sprite;
	import flash.events.*;
	import flash.utils.*;
	
	[SWF(width=400, height=400, framerate = 20)]
    public class TestPolygon extends Sprite {
        public function TestPolygon() {
        		var _w:uint = stage.stageWidth;
        		var _h:uint = stage.stageHeight;
        		var _size:uint = 50;
        		var _xtimes:uint = Math.ceil(_w / _size) + 1;
        		var _ytimes:uint = Math.ceil(_h / _size) + 1;
        		
        		for(var i:uint = 0; i < _ytimes; i++){
        			for(var j:uint = 0; j < _xtimes; j++){
        				createPolygon(_size, j, i);
        			}
        		}
        }
        
        protected function createPolygon(_size:uint, xnum:uint, ynum:uint):void
        {
        		var _vertex:uint, _is_star:Boolean, _alpha:Number;
        		_vertex = 2 + Math.round(Math.random() * 30);
        		_is_star = (Math.random() >= 0.5);
        		
        		_alpha = 0.5 + Math.random() * 0.5;
        		var _po:Polygon = new Polygon(_vertex, {
        			size: _size,
        			is_star: _is_star,
        			alpha: _alpha
        		});
        		_po.x = xnum * _size;
        		_po.y = ynum * _size;
        		addChild(_po);
        				
        		_po.scaleX = 1.1;
        		_po.scaleY = 1.1;
        }
    }
}


/*
	正多角形を生成するスクリプトだよ!
	
	Usage:
		var po:Polygon = new Polygon(頂点数:uint, options:Object{
			サイズ size:uint,
			色 color:uint,
			星型にするか is_star:Boolean,
			アルファ値 alpha:Number
		});
		var po:Polygon = new Polygon(5); //五角形をランダムなサイズと色で表示
		var po:Polygon = new Polygon(5, 100);	 //五角形をランダムな色で表示
		var po:Polygon = new Polygon(5, 100, 0xFF0000, true); //普通の星を表示
	
	サイズ指定がなければ、DEFAULT_SIZEで設定されたサイズを使用します。
	IS_RANDOM_SIZE = true にすると、
	サイズ指定がないときに、DEFAULT_SIZEを元にランダムでサイズを決定します。
	
	色指定がない場合、全色域からランダムで色が選ばれます。
	
	星型で色とサイズをランダムにしたい場合、
	size = 0
	color = 0x1000000 をセットしてください。
	
	Author: lol_lol
	Date: 2010/02/15
	Licence: MIT
*/
import flash.display.Shape;
import flash.geom.Point;

class Polygon extends Shape
{
	public static const DEFAULT_SIZE:uint = 100;
	public static const IS_RANDOM_SIZE:Boolean = true;
	
	public function Polygon(vertex:uint, options:Object)
	{
		if( vertex < 3 ){
			vertex = 3;
		}
		
		//サイズ指定なければデフォルトを使用
		if( !options.size ){
			if( IS_RANDOM_SIZE ){
				options.size = DEFAULT_SIZE / 2 + Math.round(Math.random() * DEFAULT_SIZE / 2);
			}else{
				options.size = DEFAULT_SIZE;
			}
		}
		//半径
		var _r:uint = options.size / 2;
		
		var color:uint;
		//カラー指定なければ適当
		if( !options.color || options.color > 0x1000000 ){
			color = Math.random() * 0x1000000;
		}else{
			color = options.color;
		}
		
		//ちょこっと回転させて自然にする
		var _rotate:uint = (vertex%2 == 0) ? (180 / vertex) : (90 / vertex);
		
		//Set points
		var _points:Array = new Array();
		var _radian:Number;
		for(var i:int = 0; i < vertex; i++){
			_radian = (360 / vertex * i - _rotate) * Math.PI / 180;
			_points.push(new Point(Math.cos(_radian) * _r, Math.sin(_radian) * _r));
			
			if( options.is_star ){
				_radian = (360 / vertex * (i + 0.5) - _rotate) * Math.PI / 180;
				_points.push(new Point(Math.cos(_radian) * _r / 2, Math.sin(_radian) * _r / 2));
			}
		}
		
		//create Shape
		this.alpha = options.alpha ? options.alpha : 1;
		graphics.beginFill(color);
		_points.forEach(function(e:Point, index:uint, p:Array):void{
			if( index == 0 ){
				graphics.moveTo(e.x - _r, e.y - _r);
			}else{
				graphics.lineTo(e.x - _r, e.y - _r);
			}
		});
		graphics.endFill();
	}
}