多角形作成
正多角形を生成するスクリプトだよ!
ライブラリ部分と使い方は下のほう
上のはテスト用です
/**
* 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();
}
}