【问题标题】:Actionscript randomly distribute objects on stageActionscript 在舞台上随机分配对象
【发布时间】:2011-08-24 13:00:56
【问题描述】:

我试图在我的舞台上随机分配 3 个对象,但它不起作用。我的电影是 800x800。

function makeRock():void{
    var tempRock:MovieClip;

    for(var i:Number = 1; i < 3; i++){
        tempRock = new Rock();
        tempRock.x = Math.round(800);
        tempRock.y = Math.round(-800);
        addChild(tempRock);
    }
}

我做错了什么?

【问题讨论】:

  • 哟,好问题/答案。也许给答案一个很好的大勾:)

标签: actionscript random stage


【解决方案1】:

Math.round(800); 替换为Math.random()*800;

function makeRock():void
{
    var tempRock:MovieClip;

    var i:uint = 0;
    for(i; i < 3; i++)
    {
        tempRock = new Rock();

        tempRock.x = Math.random()*800;
        tempRock.y = Math.random()*800;

        addChild(tempRock);
    }
}

Math.round(800) 只是返回 800。

Math.random() 返回一个介于 0 和 1 之间的随机数,您可以将其乘以 800 得到 0-800 的随机结果。需要注意的是,Math.random() 实际上从未返回 1.0。只是从 0 1的所有内容。


进一步阅读:

附带说明:这使得从数组中返回随机元素变得简单;因为你永远不会得到 1,所以你可以将 Math.random()*array.length 的结果转换为 uint() 并且始终在数组长度的边界内。

例如。

var ar:Array = [1,2,"hello",4,5,6,7,8,9,0];

var randomElement:Object = ar[uint(Math.random()*ar.length)];
trace(randomElement);

【讨论】:

  • 哈哈没问题 - 你甚至不想知道我在我的经验中做过的一些简单明了的事情。
  • 我认为您的阵列解决方案实际上有点缺陷。使它成为一个 uint,它永远不会返回 ar[0]。它实际上应该是 ar[Math.floor((Math.random()*ar.length))];
  • 不.. uint 只是去掉小数点后的所有内容。运行它并查看: for(var i:uint=0; i
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多