Actionscript 3中的随机数

时间:2011-01-23 19:14:28

标签: flash actionscript-3 math actionscript random

我一直在关注为Actionscript 2编写的教程,并已成功将其转换为AS 3,但是在倒数第二部分我被卡住了。

此处的教程(http://www.cleverpig.com/tutorials/whackapig/whack.htm步骤8)包含以下代码:

if (_currentframe==1) {
    // randomly choose whether or not to play
    if (random(100)>97) {
      // should we tease or popup?
      if (random(3)<1) {
        this.gotoAndPlay ("popup");
      } else {
        this.gotoAndPlay (1);
      }
    }
  }

它意味着为角色的动作添加一些随机性。经过一些谷歌搜索后,我在AS 3中创建了这个代码,希望它可以工作。

if (currentFrame==1) {
    // randomly choose whether or not to play
    if(Math.floor(Math.random()*99)-97) {
      // should we tease or popup?
      if (Math.floor(Math.random() *3)-1)
   ) {
        this.gotoAndPlay ("popup");
      } else {
        this.gotoAndPlay (1);
      }
    }
  }

当我使用此代码运行程序时,角色的整个动画将播放一次(向下,向上,向上,向下)。它应该只播放前3帧,然后重复一遍。

编辑:

function random (n:int ) : int {
    return Math.floor (Math.random() * n);
}

if (currentFrame==1) {
    // randomly choose whether or not to play
    if(random(100)): 97 {
      // should we tease or popup?
      if (random(3)): 1
      {
        this.gotoAndPlay ("popup");
      } else {
        this.gotoAndPlay (1);
      }
    }
  }

符号'洞',图层'Actionscript',第1帧,第10行1084:语法错误:在冒号前需要标识符。 符号'孔',图层'Actionscript',第1帧,第10行1008:属性无效。 符号'洞',图层'Actionscript',第1帧,第12行1084:语法错误:在冒号前需要标识符。 符号'孔',图层'Actionscript',第1帧,第13行1008:属性无效。 符号'hole',图层'Actionscript',第1帧,第15行1083:语法错误:else是意外的。

3 个答案:

答案 0 :(得分:3)

您可以轻松实现自己的random()函数,并保持其余代码完全相同:

function random (n:int ) : int {
    return Math.floor (Math.random() * n);
}

答案 1 :(得分:0)

是否有理由将更多/更少的运算符更改为减号运算符? 似乎if块将执行除0之外的所有内容。

格式为

if (condition)其中condition的计算结果为true,false。

我相信你的表达式正被转换为布尔类型。 实施例

if (random(100)>97)
是99> 97 =&gt;是(条件评估为真)
是96> 97 =&gt;否(条件评估为假)

if (random(100)-97)
99 - 97 = 2
2表示为布尔值为真(条件评估为真)
97 - 97 = 0
0表示为布尔值为false(条件计算结果为假)

答案 2 :(得分:0)

我给原始教程的作者一个-1,把一个数字随机表达式放在一个像这样的条件中。

要确定条件表达式的结果,它始终被计算为布尔值。如果在其中放入Number / int,则仅当其值为0(.0)时才为false。在所有其他情况下(包括负数),它将评估为真。

是的,您可以通过关注@ weltraumpirat的答案来创建一个更简单的random()函数,但我宁愿建议您从条件中取出random()函数并将其包装在排序的chance()方法中。例如:

function feelingLucky(ratio:Number):Boolean {
    return Math.random() <= ratio;
}

然后调用此方法将为您提供更好的x语法,如:

if (feelingLucky(97/99)) {
    // you're lucky.
} else {
    // not so lucky.
}

或您的其他条件feelingLucky(1/3)。或者尝试使用feelingLucky(100/100)连胜。

祝你好运:)

P.S。由于在if语句之后的冒号和数字:97,您最近的编辑失败了。他们不应该在那里。