colorful rain
Stats
♥0 |
Line 118 |
Modified 2010-08-03 14:34:50 |
MIT License
archived:2017-03-20 13:31:51
ActionScript3 source code
/**
* Copyright takishiki ( http://wonderfl.net/user/takishiki )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/7aQU
*/
package
{
import flash.display.AVM1Movie;
import flash.display.Graphics;
import flash.display.Sprite;
import flash.events.Event;
import net.hires.debug.Stats; // Stats
public class FlashTest extends Sprite
{
private var deg :uint = 0;
private var circle_x :Array = [];
private var circle_y :Array = [];
private var circle_color :Array = [];
private var circle_radius :Array = [];
private const c_max :uint = 50;
private const r_min :uint = 1;
private const r_max :uint = 30;
private const c_spread :uint = 50;
private var sprite:Sprite = new Sprite();
// コンストラクタ
public function FlashTest() {
var i:int;
for(i = 0; i < c_max; i++) {
circle_x[i] = randRange(0, stage.stageWidth);
circle_y[i] = randRange(0, stage.stageHeight);
circle_radius[i] = r_min;
circle_color[i] = 0xFFFFFFFF;
}
this.addChild(sprite);
this.addChild(new Stats()); // Stats
this.addEventListener(Event.ENTER_FRAME, onEnterframe);
}
//
private function onEnterframe(event:Event):void {
var i:int;
for(i = 0; i < c_max; i++) {
circle_x[i] = circle_x[i+1];
circle_y[i] = circle_y[i+1];
circle_radius[i] = circle_radius[i+1];
circle_color[i] = circle_color[i+1];
}
circle_x[c_max-1] = randRange(0, stage.stageWidth);
circle_y[c_max-1] = randRange(0, stage.stageHeight);
circle_radius[c_max-1] = randRange(r_min, r_max);
deg++;
circle_color[c_max-1] = hsv2rgb(deg, 1, 1);
// 描画処理
var g:Graphics = sprite.graphics;
g.clear();
for(i = 0; i < c_max; i++){
g.lineStyle(10, circle_color[i], i/c_max/2);
g.beginFill(circle_color[i], i/c_max);
g.drawCircle(circle_x[i], circle_y[i], c_max-i);
g.endFill();
}
}
//
private function rgb2hex(r:Number = 0, g:Number = 0, b:Number = 0):uint {
r = Math.round(r);
g = Math.round(g);
b = Math.round(b);
var rgb:uint = 0xff000000 + r * 0x10000 + g * 0x100 + b;
return rgb;
}
// a-bの乱数生成
private function randRange(min:Number, max:Number):Number {
var randomNum:Number = Math.floor(Math.random() * (max - min + 1)) + min;
return randomNum;
}
// HSV -> RGB
private function hsv2rgb(h:Number, s:Number, v:Number):uint {
var r:Number = 0;
var g:Number = 0;
var b:Number = 0;
if(s==0){
r = v;
g = v;
b = v;
}else{
var hTemp:Number = (h+360)%360;
hTemp /= 60;
var i:Number = Math.floor(hTemp); //整数部
var f:Number = hTemp-i; //小数部
var p:Number = v*(1.0-s);
var q:Number = v*(1.0-(s*f));
var t:Number = v*(1.0-(s*(1.0-f)));
switch(i){
case 0:
r = v;
g = t;
b = p;
break;
case 1:
r = q;
g = v;
b = p;
break;
case 2:
r = p;
g = v;
b = t;
break;
case 3:
r = p;
g = q;
b = v;
break;
case 4:
r = t;
g = p;
b = v;
break;
case 5:
r = v;
g = p;
b = q;
break;
}
}
var rgb:uint = 0xff000000 + Math.round(r*255) * 0x10000 + Math.round(g*255) * 0x100 + Math.round(b*255);
return rgb;
}
}
}