欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Flash遮照实例:产生不重复的随机数的方法(三种)

程序员文章站 2023-11-03 08:31:22
这篇教程是向大家介绍产生不重复的随机数的三种方法,通过一个Flash遮照实例来讲述,这三种方法,适用于在做多个随机方块遮照图片时和在播放动画时随机播放音乐,但不重复,教程比较实... 14-09-19...

这篇教程是向大家介绍产生不重复的随机数的三种方法,通过一个flash遮照实例来讲述,可以让风0到99的数排列,并不重复。这三种方法适用于在做多个随机方块遮照图片时和在播放动画时随机播放音乐,一起来看看吧!

方法一: 


复制代码
代码如下:
oldtime=gettimer();
my_array=new array();
n=100;
for(var i=0;i  my_array[i]=i;
}
for(var i=0;i var tmp1=random(n);
 var tmp2=my_array[i];
 my_array[i]=my_array[tmp1];
 my_array[tmp1]=tmp2;
}
trace(my_array); 
trace(gettimer()-oldtime);//程序运行时间
//----------------------------------------------------------

方法二


复制代码
代码如下:
n=gettimer();
array.prototype.randomize = function() {
this.sort(function(a, b) { return random(2)>0 ? 1 : -1;});
}
var myarray = new array();
for(var i=0;i<1000;i++){
myarray[i]=i; 
}
myarray.randomize();
trace(myarray); 
trace(gettimer()-n);

方法三:


复制代码
代码如下:
var num_arr:array = new array(); 
var j = 0; 
var judge = 0; 
do { 
 var temp_num = math.round(math.random()*100); 
 for (var i = 0; i  var temp_n = num_arr[i]; 
  if (temp_num == temp_n) { 
  judge = 1; 
  break; 
  } else { 
  judge = 0; 
  } 
 } 
 if (judge == 0) { 
  num_arr.push(temp_num); 
  j++; 
  _root["t"+j].text = temp_num; 
 } 
} while (j<100); 
trace(num_arr);

制作过程: 建两层,各放一图片,其中上层的图片定义实例名:pic_mc

然后画一矩形,转化为mc,定义id名为 box,然后在帧上写入as:


复制代码
代码如下:
creatmask();
//建立遮照
newnum();
//产生随机数
var i = -1;
var n = 0;
_root.onenterframe = function() {
i++;
if (i<300) {
 eval("_root.m1_mc.box"+my_array[n]).removemovieclip();
 //移除方块
 n++;
}
if (i>=400 && i<700) {
 m = my_array[i-400];
 _root.m1_mc.attachmovie("box", "box"+m, m+10, {_x:int(m/15)*20, _y:m%15*20});
 //加载方块
}
if (i>800) {
 i = 0;
 n = 0;
}
};
//-------------------------------------
function creatmask() {
_root.createemptymovieclip("m1_mc", 1);
m1_mc._x = 0;
mc_mc._y = 0;
for (var i = 0; i<300; i++) {
 _root.m1_mc.attachmovie("box", "box"+i, i+10, {_x:int(i/15)*20, _y:i%15*20});
}
pic_mc.setmask(m1_mc);
}
function newnum() {
my_array = new array();
n = 300;
for (var i = 0; i my_array[i] = i;
}
for (var i = 0; i var tmp1 = random(n);
 var tmp2 = my_array[i];
 my_array[i] = my_array[tmp1];
 my_array[tmp1] = tmp2;
}
}

在上面的基础上有所改进

制作方法与上有点差别,就是在box元件中的方块转化为mc,然后编辑这个mc,在上面做点运动变形.


复制代码
代码如下:
newnum();
//产生随机数
_root.createemptymovieclip("m1_mc", 1);
m1_mc._x = 0;
mc_mc._y = 0;
pic_mc.setmask(m1_mc);
for (var i = 0; i<300; i++) {
_root.m1_mc.attachmovie("box", "box"+i, i+100, {_x:int(i/15)*20, _y:i%15*20});
}
var i = -1;
_root.onenterframe = function() {
i++;
if (i<300) {
 m = my_array[i];
 eval("_root.m1_mc.box"+my_array[m]+".p").play();
}
if (i>=400 && i<700) {
 m = my_array[i-400];
 eval("_root.m1_mc.box"+my_array[m]+".p").play();
}
if (i>800) {
 i = -1;
}
};
//-------------------------------------
function newnum() {
my_array = new array();
n = 300;
for (var i = 0; i my_array[i] = i;
}
for (var i = 0; i var tmp1 = random(n);
 var tmp2 = my_array[i];
 my_array[i] = my_array[tmp1];
 my_array[tmp1] = tmp2;
}
}

教程结束,以上就是产生不重复的随机数的三种方法介绍,希望对大家有所帮助!