Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Как random поменять на Math.random() (http://www.flasher.ru/forum/showthread.php?t=137157)

Wadimir 05.03.2010 20:07

Как random поменять на Math.random()
 
Добрый день!

Как random в этом коде
Код AS1/AS2:

onEnterFrame = function () {
        t = random(2);
        if (t == 1) {
                a._x = 400;
        } else {
                a._x = 200;
        }
};

Поменять на Math.random() и чтобы смысл оставался тот же

Hauts 05.03.2010 21:08

Код AS1/AS2:

a._x = 200+200*Math.round(Math.random())


Wadimir 05.03.2010 23:15

А если значений больше:
Код AS1/AS2:

t = random(5);
        if (t == 1) {
                a._x = 453;
        } 
        if (t == 2) {
                a._x = 590;
        }
        if (t == 3) {
                a._x = 400;
        }
        if (t == 4) {
                a._x = 650;
        }
        if (t == 5) {
                a._x = 350;
        }

тогда как?

gloomyBrain 05.03.2010 23:26

Код AS1/AS2:

var maxValue:Number = 100; // от 0 до 100
switch(Math.floor(Math.random()*maxValue + 1)) {
 
case 1:
t = 1;
break;
 
case 2:
t = 32;
break;
 
// и так далее по образу и подобию
}


AzagThoth 06.03.2010 02:09

to gloomyBrain
Страшно даже)) Зачем столько строк писать когда одной можно.
Код AS1/AS2:

t = Math.round(Math.random*VALUE);//где VALUE максимальное значение

Ну а дальше ставите Ваш код с ифами.

udaaff 06.03.2010 02:15

Код AS1/AS2:

var array:Array = [ 453, 590, 400, 650, 350 ];
a._x = array[Math.floor(Math.random() * 5];


Wadimir 06.03.2010 19:16

спасибо, буду пробовать

etc 07.03.2010 22:24

Только не round, а floor.

AzagThoth 08.03.2010 13:06

А чем Вам round не нравится?
Код AS1/AS2:

Math.round()
Доступность
Flash Player 5. Во Flash Player 4 методы и свойства класса Math эмулируются при помощи приближенных вычислений и могут быть не так точны, как во Flash Player 5 и более поздних.
 
Синтаксис
Math.round(x:Number) : Number
 
Параметры
x A number.
 
Возвращает
Целое число.
 
Описание
Метод; округляет значение x по правилам математики. Если x одинаково близок к двум целым числам (то есть, оканчивается .5), округление происходит в большую сторону.


udaaff 08.03.2010 13:28

Цитата:

Сообщение от AzagThoth (Сообщение 891668)
А чем Вам round не нравится?

Вероятность неверно распределится.


upd: обнаружил такую вещь:

Код AS1/AS2:

var a:Array = [ 0, 0, 0, 0, 0 ];
var b:Array = [ 0, 0, 0, 0, 0 ];
 
for (var i:Number = 0; i < 100; i++)
{
        var k:Number = Math.round(Math.random() * 4);
        b[k]++;
        a[Math.round(Math.random() * 4)]++;
}
 
var sumA:Number = 0;
var sumB:Number = 0;
 
for (i = 0; i < 5; i++)
{
        sumA += a[i];
        sumB += b[i];
}
trace("sumA " + sumA + " sumB " + sumB);

При настройках публикации AS2 FP9 trace() выдает:
sumA 128 sumB 100
sumA 116 sumB 100
sumA 117 sumB 100
Т.е. выражение a[Math.round(Math.random() * 4)]++; работает непонятным мне образом.

При настройках публикации AS3 и там и там 100, как и предполагалось.

Это какой-то баг о котором я не знал? В курсе кто-нибудь?


Часовой пояс GMT +4, время: 13:10.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.