RandomTest.as
package {
import flash.display.Sprite;
import flash.events.Event;
public class RandomTest extends Sprite{
private static const NMAX:int = 100000;
private var _rectNum:int = 100;
private var _rectWidth:Number = 1/_rectNum;
private var _ary:Array;
private var _canvas:Sprite;
private var _slider:SimpleSlider;
private var _func:Function;
public function RandomTest(){
makeCanvas(400,100);
_func = f1;
init();
calc();
draw(400,100);
}
private function makeCanvas(w:Number,h:Number):void{
_canvas = new Sprite();
_canvas.x = stage.stageWidth/2 - w/2;
_canvas.y = stage.stageHeight/2 + h/2;
addChild(_canvas);
_slider = new SimpleSlider(1,5,1);
_slider.x = 330;
_slider.y = 330;
_slider.rotation = 90;
addChild(_slider);
_slider.addEventListener(Event.CHANGE,onChange);
}
private function init():void{
_ary = new Array(_rectNum);
for (var i:int=0; i<_rectNum; i++){
_ary[i] = 0;
}
}
private function calc():void{
for (var n:int=0; n<NMAX; n++){
var i:int = Math.floor(_func()/_rectWidth);
_ary[i]++;
}
}
private function draw(w:Number,h:Number):void{
var scaleX:Number = _rectWidth*w;
var scaleY:Number = 0.5*_rectNum*h/NMAX;
_canvas.graphics.clear();
_canvas.graphics.beginFill(0x0);
for (var i:int=0; i<_rectNum; i++){
_canvas.graphics.drawRect(i*scaleX,0,scaleX,-1*_ary[i]*scaleY);
}
_canvas.graphics.endFill();
}
private function onChange(e:Event):void{
var n:int = Math.round(e.target.value);
switch(n){
case 1:
_func = f1;
break;
case 2:
_func = f2;
break;
case 3:
_func = f3;
break;
case 4:
_func = f4;
break;
case 5:
_func = f5;
break;
default:
_func = f1;
}
init();
calc();
draw(400,100);
}
private function f1():Number{
return Math.random();
}
private function f2():Number{
return (Math.random()+Math.random())/2;
}
private function f3():Number{
return (Math.random()+Math.random()+Math.random())/3;
}
private function f4():Number{
return (Math.random()+Math.random()+Math.random()+Math.random())/4;
}
private function f5():Number{
return (Math.random()+Math.random()+Math.random()+Math.random()+Math.random())/5;
}
}
}
SimpleSlider.as
package{
import flash.display.Sprite;
import flash.events.MouseEvent;
import flash.geom.Rectangle;
import flash.events.Event;
public class SimpleSlider extends Sprite{
private var _width:Number = 6;
private var _height:Number = 100;
private var _value:Number;
private var _max:Number = 100;
private var _min:Number = 0;
private var _handle:Sprite;
private var _back:Sprite;
private var _backWidth:Number = 0;
private var _handleHeight:Number = 20;
private var _backColor:uint = 0xcccccc;
private var _backBorderColor:uint = 0x999999;
private var _handleColor:uint = 0x000000;
private var _handleBorderColor:uint = 0xcccccc;
private var _handleRadius:Number = 2;
private var _backRadius:Number = 2;
public function SimpleSlider(min:Number=0, max:Number=100, value:Number=100){
_min = min;
_max = max;
_value = Math.min(Math.max(value, min), max)
init();
}
private function init():void{
_back = new Sprite();
addChild(_back);
_handle = new Sprite();
_handle.buttonMode = true;
addChild(_handle);
_handle.addEventListener(MouseEvent.MOUSE_DOWN, onMouseDown);
draw();
updatePosition();
}
private function draw():void{
drawBack();
drawHandle();
}
private function drawBack():void{
_back.graphics.clear();
_back.graphics.beginFill(_backColor);
_back.graphics.lineStyle(0, _backBorderColor);
_back.graphics.drawRoundRect(0, 0, _backWidth, _height, _backRadius, _backRadius);
_back.graphics.endFill();
_back.x = _width / 2 - _backWidth / 2;
}
private function drawHandle():void{
_handle.graphics.clear();
_handle.graphics.beginFill(_handleColor);
_handle.graphics.lineStyle(0, _handleBorderColor);
_handle.graphics.drawRect(0, 0, _width, _handleHeight);
_handle.graphics.endFill();
}
private function updatePosition():void{
var handleRange:Number = _height - _handleHeight;
var valueRange:Number = _max - _min;
_handle.y = handleRange - (_value - _min) / valueRange * handleRange;
}
private function updateValue():void{
var handleRange:Number = _height - _handleHeight;
var valueRange:Number = _max - _min;
_value = (handleRange - _handle.y) / handleRange * valueRange + _min;
dispatchEvent(new Event(Event.CHANGE));
}
private function onMouseUp(event:MouseEvent):void{
stage.removeEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
stage.removeEventListener(MouseEvent.MOUSE_UP, onMouseUp);
_handle.stopDrag();
}
private function onMouseDown(event:MouseEvent):void
{
stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
stage.addEventListener(MouseEvent.MOUSE_UP, onMouseUp);
_handle.startDrag(false, new Rectangle(0, 0, 0, _height - _handleHeight));
}
private function onMouseMove(event:MouseEvent):void{
updateValue();
}
public function invalidate():void{
draw();
}
public function move(x:Number, y:Number):void{
this.x = x;
this.y = y;
}
public function setSize(w:Number, h:Number):void{
_width = w;
_height = h;
draw();
}
public function set backBorderColor(n:uint):void{
_backBorderColor = n;
draw();
}
public function get backBorderColor():uint{
return _backBorderColor;
}
public function set backColor(n:uint):void{
_backColor = n;
draw();
}
public function get backColor():uint{
return _backColor;
}
public function set backRadius(n:Number):void{
_backRadius = n;
}
public function get backRadius():Number{
return _backRadius;
}
public function set backWidth(n:Number):void{
_backWidth = n;
draw();
}
public function get backWidth():Number{
return _backWidth;
}
public function set handleBorderColor(n:uint):void{
_handleBorderColor = n;
draw();
}
public function get handleBorderColor():uint{
return _handleBorderColor;
}
public function set handleColor(n:uint):void{
_handleColor = n;
draw();
}
public function get handleColor():uint{
return _handleColor;
}
public function set handleRadius(n:Number):void{
_handleRadius = n;
draw();
}
public function get handleRadius():Number{
return _handleRadius;
}
public function set handleHeight(n:Number):void{
_handleHeight = n;
draw();
updatePosition();
}
public function get handleHeight():Number{
return _handleHeight;
}
override public function set height(n:Number):void{
_height = n;
draw();
}
override public function get height():Number{
return _height;
}
public function set max(n:Number):void{
_max = n;
updatePosition();
}
public function get max():Number{
return _max;
}
public function set min(n:Number):void{
_min = n;
updatePosition();
}
public function get min():Number{
return _min;
}
public function set value(n:Number):void{
_value = n;
_value = Math.min(_max, Math.max(_value, _min));
updatePosition();
}
public function get value():Number{
return _value;
}
override public function set width(n:Number):void{
_width = n;
draw();
}
override public function get width():Number{
return _width;
}
}
}
Powered by blog Boreal Kiss 2008.