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

回転リング event / rotate

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/1PZm
 */

// forked from lol_lol's 多角形作成
package {
	import flash.text.TextFormat;
	import flash.accessibility.Accessibility;
	import flash.text.TextField;
	import flash.display.Sprite;
	import flash.events.*;
	import flash.utils.*;
	import flash.geom.Point;
	
	[SWF(framerate = 10)]
    public class Ring extends Sprite {
    		private static const PADDING:uint = 100;
    		private static const SIZE:uint = 50;
    		
    		private var _center:Point;
    		private var _r:uint;
    		private var _speed:int = 1;
    		
    		private var _ring:Sprite;
    		private var on_guruguru:Boolean = false;
    		
        public function Ring() {
        		createRing();
        }
        
        public function createRing():void
        {
        		//キャンバスの中心にパディングしてリングを描くよ!
        		var _w:uint = stage.stageWidth;
        		var _h:uint = stage.stageHeight;
        		
        		_r = (_h - PADDING) / 2;
        		_center = new Point((SIZE + _w) / 2, (SIZE + _h) / 2);
        		
        		var _radian:Number;
        		var _p:Point;
        		
        		//リングごと回転させるためのコンテナさん
        		_ring = new Sprite();
        		_ring.x = _w / 2;
        		_ring.y = _h / 2;
        		
        		//リングのアイテムさん
        		var _ringItems:Sprite = new Sprite();
        		_ringItems.x = -1 * (_r + SIZE);
        		_ringItems.y = -1 * (_r + SIZE);
        		
        		//_ring.width = _r;
        		//_ring.height = _r * 2;
        		
        		for(var i:uint = 0; i < 360; i += 10)
        		{
        			_radian = i * Math.PI / 180;
        			_p = new Point(_center.x + Math.cos(_radian) * _r, _center.y + Math.sin(_radian) * _r);
        			var _po:Polygon = createPolygon(SIZE, _p.x, _p.y);
        			
        			_ringItems.addChild(_po);
        		}
        		
        		_ring.addChild(_ringItems);
        		addChild(_ring);
        		
        		//ぐるぐるする
        		addEventListener(Event.ENTER_FRAME, update);
        		
        		stage.addEventListener(MouseEvent.MOUSE_OVER, function(e:Event):void{
        			//2秒間回す
        			if( !on_guruguru ){
        				on_guruguru = true;
        				_speed *= 10;
	        			
	        			setTimeout(function():void{
	        				on_guruguru = false;
	        				_speed /= 10;
	        			}, 2000);
        			}
        		});
        }
        
        //毎秒10ぐるぐる
        public function update(e:Event):void
        {
        		_ring.rotation += _speed;
        }
        
        public function createPolygon(_size:uint, xnum:uint, ynum:uint):Polygon
        {
        		var _vertex:uint, _is_star:Boolean, _alpha:Number;
        		_vertex = 3 + Math.ceil(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;
        		_po.y = ynum;
        		
        		return _po;
        }
    }
}


/*
	正多角形を生成するスクリプトです。
	ご自由にお使いください。
	
	下のクラスをコピペでおk
	
	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 <= 2 ) return;
		
		//サイズ指定なければデフォルトを使用
		if( !options.size ){
			if( IS_RANDOM_SIZE ){
				options.size = Math.round(DEFAULT_SIZE / 2 + 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:Number= (vertex%2 == 0) ? (180 / vertex) : (90 / vertex);
		
		//Set points
		var _points:Array = new Array();
		var _radian:Number;
		for(var i:Number = 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();
	}
}