AS3 Math.random生成相同的数字

时间:2014-11-24 07:12:59

标签: actionscript-3 flash

我尝试生成一个随机数,如果它符合if条件,则会播放声音。这曾经起作用,但由于某种原因,它只生成相同的数字。请帮忙!

var myNum:Number = Math.floor(Math.random() * 2000);
stage.addEventListener(Event.ENTER_FRAME, creakers);
function creakers(e:Event):void
{
trace(myNum);
if (myNum<10)
{ 
    creakSound.play();}}

3 个答案:

答案 0 :(得分:3)

您正在事件侦听器之外生成随机数。所以你永远不会改变myNum。您需要在creakers方法中移动它。

function creakers(e:Event):void
{
    var myNum:Number = Math.floor(Math.random() * 2000);
    trace(myNum);
}

答案 1 :(得分:0)

问题是myNum是另一个函数(构造函数)中的局部变量,并且你试图在另一个函数creakers中访问相同的变量。在一个函数中定义的局部函数将仅限于该函数。所以为了使事情正确你应该在creakers函数中定义myNum变量。

还有另外一种方法....在类中将此变量定义为公共变量或私有变量。这样它就可以用在类

中的多个函数中
class xx{
 public var mynum:Number
 function xx(){
   mynum = Math.random * 20000;
 }
 function creaker{
   trace(mynum);
 }
}

答案 2 :(得分:0)

如果要计算每个输入帧的myNum,则必须在事件为Event.ENTER_FRAME的creakers函数中进行此计算。

var myNum:uint;

function creakers(e:Event):void
{
    myNum = Math.floor(Math.random() * 2000);
}

stage.addEventListener(Event.ENTER_FRAME, creakers);

<强>说明

  • Math.floor(Math.random()* 2000)是一个integer,所以myNum的类型不是{\ n} Numberuint

  • myNum应该在函数creakers之外声明 因为它对每个enterframe的declare变量没用。您 只需要将它归结为一个新值。