/**
* Copyright takishiki ( http://wonderfl.net/user/takishiki )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/dJUs
*/
/*
* kaleidoscope
* 万華鏡の具?が回るところのみ。
* ここまではそんなに無駄はない・・・のか?
*
* 図形は毎回ランダム。
*/
package
{
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.display.MovieClip;
import com.actionsnippet.qbox.*;
import Box2D.Common.Math.b2Vec2;
import com.actionsnippet.qbox.QuickBox2D;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.ColorTransform;
import flash.geom.Matrix;
import flash.geom.Point;
import flash.geom.Rectangle;
import flash.text.TextField;
import flash.display.BlendMode;
import flash.display.Graphics;
[SWF(width=465, height=465, frameRate=30, backgroundColor=0xFFFFFF)]
public class Main extends MovieClip
{
private const LEN:int = 100;
private const NUM:int = 20;
private const DEBUG:Boolean = false;
private var _sp:Sprite;
private var _sim:QuickBox2D;
private var _deg:Number = 0;
//
public function Main():void {
stage.frameRate = 60;
_sim = new QuickBox2D(this, { debug:DEBUG } );
_sim.setDefault( { fillColor:0x000000, lineAlpha:0, radius:1.5 } );
_sim.createStageWalls();
var a:Number = stage.stageWidth / 4 / 30;
_sim.addBox( { x:a, y:a * 2, width:0.5, height:a * 2, angle:0, density:0, fillColor:0x000000 } );
_sim.addBox( { x:a * 3, y:a * 2, width:0.5, height:a * 2, angle:0, density:0, fillColor:0x000000 } );
_sim.addBox( { x:a * 2, y:a, width:a * 2, height:0.5, angle:0, density:0, fillColor:0x000000 } );
_sim.addBox( { x:a * 2, y:a * 3, width:a * 2, height:0.5, angle:0, density:0, fillColor:0x000000 } );
_sim.gravity = new b2Vec2(0, 0);
var type:int;
var i:int;
for (i = 0; i < NUM; i++) {
type = randRange(0, 1);
if (type == 0) {
_sim.addBox( {
x:stage.stageWidth / 30 / 2, y:stage.stageHeight / 30 / 2,
width:randRange(1, 15) / 10, height:randRange(1, 15) / 10,
fillColor:randRange(1, 0xFFFFFF), fillAlpha:randRange(5, 10) / 10,
lineColor:randRange(0, 0), lineAlpha:0
} );
}else {
_sim.addCircle( {
x:stage.stageWidth / 30 / 2, y:stage.stageHeight / 30 / 2,
radius:randRange(1, 10) / 10,
fillColor:randRange(1, 0xFFFFFF), fillAlpha:randRange(5, 10) / 10,
lineColor:randRange(0, 0), lineAlpha:0
} );
}
}
_sim.start();
_sim.mouseDrag();
var r3:Number = Math.sqrt(3);
var sp:Sprite = new Sprite();
sp.graphics.beginFill(0x000000, 0.5);
//sp.graphics.beginFill(0x000000, 1.0);
sp.graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight);
drawPoly(sp, 3, stage.stageWidth / 2, stage.stageHeight / 2, LEN * 0.9 / 2 / r3 * 2, 30);
sp.graphics.endFill();
this.addChild(sp);
this.addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
// draw shape
private function drawPoly(sp:Sprite, num:int, x:int, y:int, r:int, deg:Number):void {
/*
* sp:対象Sprite
* num:頂点の数
* x:中心のx座標
* y:中心のy座標
* r:半径
* deg:回転角度(度)
*/
var g:Graphics = sp.graphics;
var rad:Number;
var i:int;
var step:Number = 360 / num;
// 描画スタート位置に移動
rad = deg2rad(0 + deg);
g.moveTo(x + r * Math.cos(rad), y + r * Math.sin(rad));
for (i = 0; i < num; i++) {
rad = deg2rad((i + 1) * step + deg);
g.lineTo(x + r * Math.cos(rad), y + r * Math.sin(rad));
}
}
//
private function onEnterFrame(event:Event):void {
_deg += 1;
if (_deg >= 360) {
_deg -= 360;
}
var rad:Number = _deg / 180 * Math.PI;
var s:Number = 20;
_sim.gravity = new b2Vec2(s * Math.cos(rad), s * Math.sin(rad));
}
// degree -> radian
private function deg2rad(deg:Number):Number {
deg %= 360;
return deg / 180 * Math.PI;
}
// a-bの乱数生成
private function randRange(min:Number = 0, max:Number = 1):Number {
var randomNum:Number = Math.floor(Math.random() * (max - min + 1)) + min;
return randomNum;
}
}
}