Форум 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)
-   -   отрицательный рендом (http://www.flasher.ru/forum/showthread.php?t=145677)

DJ_Baton 16.10.2010 02:28

отрицательный рендом
 
Сто лет ничего не писал на экшен скрипте, решил вспомнить как оно и чего и понял что почти всё позабывал :( ну бывает в общем...
Делаю следующую заморочку: есть некий объект, задача следующая - он в начале маленький, потом должен увеличиваться и с рендомной скоростью полететь из центра мувика в какую-то сторону.

Код AS1/AS2:

onClipEvent (load) {
//задаем размер в 1 пиксель
    this._width = 1;
    this._height = 1;
//располагаем объект по середине мувика
    this._x=_root._width/2;
    this._y=_root._height/2;
//скорость увеличения размера
    k=random(5);
}

Далее нужно сделать что бы увеличивался в размерах и улетал в какую-то точку

Код AS1/AS2:

onClipEvent (enterFrame) {
    this._width = this._width+k;
    this._height = this._height+k;
    this._x = this._x+d;
    this._y = this._y+m;
}

Вот тут я и облажался в системе координат, для переменных d и m надо задать рендом от -10 до 10 (допустим), как это выглядит напомните плиз, рендом с заданными двумя числами от ___ до ___.

Заранее спасибо ;)

f.g.programmer 16.10.2010 02:39

Код AS3:

function random(a:Number, b:Number):Number {
    return a + (b - a) * Math.random();
}


DJ_Baton 16.10.2010 03:14

не понял ничего, можно наглядный пример, т.е. у меня есть переменная d я хочу присвоить ей рендомное значение от -10 до 10, если без отрицательных до 10 это выглядит так:

Код AS1/AS2:

onClipEvent (load) {
d = random (11);
}

покажи плиз как оно правильно выглядит в твоём варианте. Пробовал так:
Код AS1/AS2:

d= random(a + (b - a));

не хочет принимать отрицательные значения

можно конечно извратиться и сделать
Код AS1/AS2:

d= -10 + random(20);

но это имхо изврат

Mnilionic 16.10.2010 03:42

Код AS1/AS2:

function _random(a:Number, b:Number):Number {
    return Math.round(a + (b - a) * Math.random());
}
d =  _random(-10, 10);


DJ_Baton 16.10.2010 04:41

Mnilionic, пасиба, теперь понял

rainbowrussia 16.10.2010 06:20

Только, наверное, корректнее будет не round, а floor:

Код AS1/AS2:

function _random(a:Number, b:Number):Number {
    return a + Math.floor((b - a + 1) * Math.random());
}
d =  _random(-10, 10);

А если значения нужны дробные, то "Math.floor" и "+1" убираем.

Mnilionic 16.10.2010 17:08

floor округляет в меньшую сторону до целого любую дробь.
Тогда как raound округляет математически и получается равный шанс появления как меньшего так и ближайшего большего целого.

udaaff 16.10.2010 17:48

Цитата:

Сообщение от Mnilionic (Сообщение 943128)
floor округляет в меньшую сторону до целого любую дробь.
Тогда как raound округляет математически и получается равный шанс появления как меньшего так и ближайшего большего целого.

http://www.flasher.ru/forum/showpost...2&postcount=26

Mnilionic 16.10.2010 20:17

и действительно...
Спасибо.


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

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