Случайное число AS3

Я видел несколько вопросов о случайных числах, но не понимаю, как я могу их использовать. Я хочу сгенерировать число от 0,5 до 2, например 0,5, 1,1, 1,2, 1,3 и т. д., и использовать его в анимации. Вот что у меня есть:

var letters:Array = [Rbox1, Rbox2, Rbox3, Rbox4, Rbox5, Rbox6,
                     Rbox7, Rbox8, Rbox9, Rbox10, Rbox11, Rbox12]

function randomRange(minNum:Number, maxNum:Number):Number
{
    return (Math.floor(Math.random() * (maxNum - minNum + 1)) + minNum);
}

start_mc.addEventListener(MouseEvent.CLICK, startAni);
function startAni(event:MouseEvent):void{
    for (var i:String in letters) {
        var letterX:int = letters[i].x;
        var letterY:int = letters[i].y - 450;
        TweenLite.to(letters[i], 1, {x:letterX, y:letterY});
    }
}

1 в этой строке становится случайным числом

TweenLite.to(letters[i], 1, {x:letterX, y:letterY});

Это скорость, с которой каждый из Rbox будет двигаться к своей позиции:

Любая помощь приветствуется

Ян


person snookian    schedule 06.02.2014    source источник


Ответы (2)


Хорошо решено для случайного числа от 1 до 10

start_mc.addEventListener(MouseEvent.CLICK, startAni);
function startAni(event:MouseEvent):void{
    TweenLite.to(start_mc, 1, {alpha:0});
    for (var i:String in letters) {
        var letterX:int = letters[i].x;
        var letterY:int = letters[i].y - 450;

        var minLimit:uint = 1;
        var maxLimit:uint = 10;
        var range:uint = maxLimit - minLimit;
        var myNum:Number = Math.ceil(Math.random()*range) + minLimit;

        TweenLite.to(letters[i], myNum, {x:letterX, y:letterY, delay:1});
    }
}
person snookian    schedule 06.02.2014

Math.random() возвращает от 0,0 до 0,99999999 {не уверен, сколько знаков после запятой).

Итак, если ваше случайное число было .23456, вы делаете * (2 - 0.5 + 1), чтобы получить 0.5864.

Math.floor() удаляет ваши десятичные разряды.

Итак, принесите свой 0.5864 в 0. Затем вы + 0.5. Доведение его до странно 0.5.

Если вам нужно, чтобы ваши результаты были с точностью до 1 знака после запятой, как вы указали, проблема с математикой заключается в том, что Math.floor слишком рано. Пытаться:

var result:Number = Math.floor(((Math.random() * (max - min)) + min) * 10) / 10;

Если вам требуется более 1 знака после запятой, вы можете превратить 10 в 100 для 2 или 1000 для 3. Если вы хотите, чтобы это было динамично, вы можете изменить 10 на Math.pow(10, dp);, где DP - это столько десятичных знаков, сколько вы хотите.

person WORMSS    schedule 06.02.2014