Flash AS3教程:Random类

所属分类: 媒体动画 / Flash教程 阅读数: 84
收藏 0 赞 0 分享
前面讲了Flash AS3教程:Level2D类,Random类是一个简单的随机函数工具类,总共提供了9种静态方法来获取不同的随机值。
随便写的,如果你还有什么更好的建议,请提出来,谢谢~

index.base.func.Random类:
代码:public final class Random
提供了9种静态方法来获取不同的随机值

构造函数:
public function Random()
如果直接实例化该类,将抛出错误

boolean静态属性:
public static function get boolean():Boolean
随机获取一个布尔值,即可能是true,也可能是false

wave静态属性:
public static function get wave():int
随机获取一个正负波动值,即可能是1,也可能是-1

integer静态方法:
public static function integer(num:Number):int
随机获取一个范围中的整数值

number静态方法:
public static function number(num:Number):Number
随机获取一个范围中的Number指

range静态方法:
public static function range(num1:Number,num2:Number,isInt:Boolean = true):Number
isInt:表示是否以整数随机
随机在一个指定范围获取数值

ranges静态方法:
public static function ranges(...args):Number
最后一个参数可以是逻辑值,用处等同于range的isInt参数,默认为true
随机在多个指定范围获取数值

string静态方法:
public static function string(str:String = "0-9,A-Z,a-z"):String
在指定范围随机一个字符

bit静态方法:
public static function bit(num:int,str:String = ""):String
在指定范围随机一个num位的字符串

color静态方法:
public static function color(red:String = "0-255",green:String = "0-255",blue:String = "0-255"):uint
在指定范围随机一个颜色值

举例:

CODE:
import index.base.func.Random;

trace(Random.boolean "(随机一个布尔值)");
trace(Random.color() "(随机一个RGB颜色值)");
trace(Random.color("153-255","0-100","0-100") "(随机一个偏红的RGB颜色值)");
trace(Random.wave "(随机一个波动值)");
trace(Random.string() "(随机一个字符)");
trace(Random.integer(4) "(随机一个int值)");
trace(Random.number(4) "(随机一个Number值)");
trace(Random.string("a-z,A-Z") "(在一个范围随机字符)");
trace(Random.string("我,你,他") "(在一个范围随机中文字符)");
trace(Random.ranges(5,4,3,-1,-10,-14,true) "(在多个指定范围随机数值)");
trace(Random.range(4,9) "(在一个指定范围随机数值)");
trace(Random.bit(8) "(随机一个八位的字符串)");
trace(Random.bit(16,"0-1") "(随机一个十六位的二进制)");
trace("…………")

//生成一个偏红的颜色色块
var sh:Shape = new Shape();
var rgb:uint = Random.color("204-255","0-153","0-153");
trace(rgb1.toString(16));
sh.graphics.beginFill(rgb);
sh.graphics.drawRect(100,100,100,100);
addChild(sh);

//生成一个颜色偏深或者偏淡的颜色色块
var sh1:Shape = new Shape();
var rgb1:uint = Random.color("0-20,240-255","0-20,240-255","0-20,240-255");
trace(rgb1.toString(16));
sh1.graphics.beginFill(rgb1);
sh1.graphics.drawRect(200,100,100,100);
addChild(sh1);

/**
* 输出:
* false(随机一个布尔值)
* 8370486(随机一个RGB颜色值)
* 12322387(随机一个偏红的RGB颜色值)
* -1(随机一个波动值)
* E(随机一个字符)
* 3(随机一个int值)
* 1.0007172282785177(随机一个Number值)
* m(在一个范围随机字符)
* 我(在一个范围随机中文字符)
* -14(在多个指定范围随机数值)
* 5(在一个指定范围随机数值)
* idPJav1l(随机一个八位的字符串)
* 1010100101010100(随机一个十六位的二进制)
* …………
* dd5506
* fef003
*/
类源代码:

CODE:
package index.base.func{

public final class Random{

public function Random(){
throw new Error("随机函数工具包无法实例化!");
}

//获取一个随机的布尔值
public static function get boolean():Boolean{
return Boolean(integer(2));
}

//获取一个正负波动值
public static function get wave():int{
return integer(2) * 2 - 1;
}

//获取一个随机的范围整数值
public static function integer(num:Number):int{
return Math.floor(number(num));
}

//获取一个随机的范围Number值
public static function number(num:Number):Number{
return Math.random() * num;
}

//在一个范围内获取一个随机值,返回结果范围:num1 >= num > num2
public static function range(num1:Number,num2:Number,isInt:Boolean = true):Number{
var num:Number = number(num2 - num1) num1;
if(isInt) num = Math.floor(num);
return num;
}

//在多个范围获取随机值
public static function ranges(...args):Number{
var isInt:Boolean = args[args.length - 1] is Boolean ? args.pop() : true;
var num:Number = randomRange(args);
if(!isInt) num = Math.random();
return num;
}

//获取一个随机字符,默认随机范围为数字 大小写字母,也可以指定范围,格式:a-z,A-H,5-9
public static function string(str:String = "0-9,A-Z,a-z"):String{
return String.fromCharCode(randomRange(explain(str)));
}

//生成指定位数的随机字符串
public static function bit(num:int,str:String = "0-9,A-Z,a-z"):String{
var reStr:String = "";
for(var i:int = 0; i < num; i ) reStr = string(str);
return reStr;
}

//获取一个随机的颜色值
public static function color(red:String = "0-255",green:String = "0-255",blue:String = "0-255"):uint{
return Number("0x" transform(randomRange(explain(red,false)))
transform(randomRange(explain(green,false)))
transform(randomRange(explain(blue,false))));
}

//将10进制的RGB色转换为2位的16进制
private static function transform(num:uint):String{
var reStr:String = num.toString(16);
if(reStr.length != 2) reStr = "0" reStr;
return reStr;
}

//字符串解析
private static function explain(str:String,isCodeAt:Boolean = true):Array{
var argAr:Array = new Array;
var tmpAr:Array = str.split(",");
for(var i:int = 0; i < tmpAr.length; i ){
var ar:Array = tmpAr[i].split("-");
if(ar.length == 2){
var arPush0:String = ar[0];
var arPush1:String = ar[1];
if(isCodeAt){
arPush0 = arPush0.charCodeAt().toString();
arPush1 = arPush1.charCodeAt().toString();
}
//此处如果不加1,将不会随机ar[1]所表示字符,因此需要加上1,随机范围才是对的
argAr.push(Number(arPush0),Number(arPush1) 1);
}else if(ar.length == 1){
var arPush:String = ar[0];
if(isCodeAt) arPush = arPush.charCodeAt().toString();
//如果范围是1-2,那么整型随机必定是1,因此拿出第一个参数后,把范围定在参数 1,则就是让该参数参加随机
argAr.push(Number(arPush),Number(arPush) 1);
}
ar = null;
}
tmpAr = null;
return argAr;
}

//获取随机范围
private static function randomRange(ar:Array):Number{
var tmpAr:Array = new Array;
var length:int = ar.length;
if(length % 2 != 0 || length == 0) throw new Error("参数错误!无法获取指定范围!");
//将所有可能出现的随机数存入数组,然后进行随机
for(var i:int = 0; i < length / 2; i ){
var i1:int = ar[i * 2];
var i2:int = ar[i * 2 1];
if(i1 > i2){
var tmp:Number = i1;
i1 = i2;
i2 = tmp;
}
for(i1; i1 < i2; i1 ) tmpAr.push(i1);
}
var num:Number = tmpAr[integer(tmpAr.length)];
tmpAr = null;
ar = null;
return num;
}

}

}

更多精彩内容其他人还在看

FLASH CLASS的基本编写规范

继续回来写教程。本来不想写这节的,因为这节的内容很多书上或者网上资料都有,而且写的比我要详细正规得多。但后来想想,还是写吧!为啥?凑篇幅呗~啊哈哈~而且后面几节要结合接宝的范例游戏,具体分析它的几个CLASS,所以,还是用一节把CLASS的写法说一下。可能我对CLASS
收藏 0 赞 0 分享

flash教程:使用拆分数字和文字的函数

flash的小函数:拆分数字和文字的函数. 以下为引用的内容: /* * 拆分数字和文字 */ public function splitNS(s:String):Object{ var tNum:String=""
收藏 0 赞 0 分享

通过实例学习Flash AS3.0——案例六

相关文章: 通过实例学习Flash AS3.0——案例五 首先声明:本人大菜鸟一个,刚接触AS3不久,许多理念还没来得及灌输,这些case都是从网上down的,但因为解说是英文的,不利我们学习,我就充当一个translater,顺便可以让自己巩固一下
收藏 0 赞 0 分享

用Flash AS制作逼真的下雨动画效果

Flash教程:用Flash AS制作逼真的下雨动画效果 先看下效果:(附.swf文件) 制作过程 一、新建一图层,大小随意; 二、新建元件(影片剪辑): 1、制作雨滴并下落。使用直线工具(颜色设为灰色,1像素)画一短直线,使用选择工具将直
收藏 0 赞 0 分享

通过实例学习Flash AS3.0——案例五

相关文章: 通过实例学习Flash AS3.0——案例四 首先声明:本人大菜鸟一个,刚接触AS3不久,许多理念还没来得及灌输,这些case都是从网上down的,但因为解说是英文的,不利我们学习,我就充当一个translater,顺便可以让自己巩固一下
收藏 0 赞 0 分享

Flash CS3制作Fla形式的组件

  本文为大家介绍如何制作Flash CS3中的[*.fla]形式的的组件(Component)。这种组件和SWC组件不同,它和CS3自带的组件一样能够双击进入组件里面编辑,是Flash CS3新增加的一种组件形态。下面我们制作一个MyButton组件为例子。   制作步骤:
收藏 0 赞 0 分享

通过实例学习Flash AS3.0——案例四

相关文章:通过实例学习AS3.0——案例三 首先声明:本人大菜鸟一个,刚接触AS3不久,许多理念还没来得及灌输,这些case都是从网上down的,但因为解说是英文的,不利我们学习,我就充当一个translater,顺便可以让自己巩固一下知识。
收藏 0 赞 0 分享

通过实例学习flash AS3.0——案例二

相关文章:通过实例学习AS3.0 --案例一 首先声明:本人大菜鸟一个,刚接触AS3不久,许多理念还没来得及灌输,这些case都是从网上down的,但因为解说是英文的,不利我们学习,我就充当一个translater,顺便可以让自己巩固一下知识。 水平有限,错误难免,欢
收藏 0 赞 0 分享

通过实例学习AS3.0——案例三

相关文章:通过实例学习flash AS3.0——案例二 首先声明:本人大菜鸟一个,刚接触AS3不久,许多理念还没来得及灌输,这些case都是从网上down的,但因为解说是英文的,不利我们学习,我就充当一个translater,顺便可以让自己巩固一下知
收藏 0 赞 0 分享

通过实例学习AS3.0

首先声明:本人大菜鸟一个,刚接触AS3不久,许多理念还没来得及灌输,这些case都是从网上down的,但因为解说是英文的,不利我们学习,我就充当一个translater,顺便可以让自己巩固一下知识。 水平有限,错误难免,欢迎大虾小虾,大鸟小鸟指正。 下面进入正题:
收藏 0 赞 0 分享
查看更多