Форум 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)
-   -   var i:Number = randRange( 0, 4); получаю не число ((( (http://www.flasher.ru/forum/showthread.php?t=95747)

progman 13.05.2007 12:24

var i:Number = randRange( 0, 4); получаю не число (((
 
работает:
Код:

_root.mc_picture[40]._x = 0;
_root.mc_picture[40]._y = 0;
_root.mc_picture[40]._visible = true;

не работает:
Код:

var i:Number = randRange( 0, 52);
_root.mc_picture[i]._x = 0;
_root.mc_picture[i]._y = 0;
_root.mc_picture[i]._visible = true;

Код:

function randRange(min:Number, max:Number):Number
{
  var randomNum:Number = Math.round(Math.random()*(max-min))+min;
  return randomNum;
}

где собака порылась?
ЗЫ и вообще в флешах работает приведение типов? чтобы я, например:
int y = (int) i / 13;
а то в такой записи у меня float получается:
var y:Number = i / 13;
:umnik2:

iNils 13.05.2007 12:28

До AS3 есть только Number.

iNils 13.05.2007 12:58

Это сообщение оставил Kikasso, но в результате каких то глюков, его сообщения при объединении, попали совсем в другую тему к другому автору.

неравномерно.
Код:

var arr = [];
var i = 100000;


function randRange(min:Number, max:Number):Number
{
  var randomNum:Number = Math.round( Math.random()*(max-min) +min );
  return( randomNum );
}
while (i--){
        var n = randRange( 49, 52 );
        if(!arr[n])arr[n] = 0;
        arr[ n ]++;
}
trace ( 49 + ">" +  arr[49]);
trace ( 50 + ">" +  arr[50]);
trace ( 51 + ">" +  arr[51]);
trace ( 52 + ">" +  arr[52]);

Первый и последний выпадают вдвое реже остальных.

вот теперь шоколадно:
Код:

var arr = [];
var i = 100000;
function randRange(min:Number, max:Number):Number
{
  var randomNum:Number = Math.floor( Math.random()*( max + 1 - min ) + min );
  return( randomNum );
}
while (i--){
        var n = randRange( 49, 52 );
        if(!arr[n])arr[n] = 0;
        arr[ n ]++;
}
trace ( 49 + ">" +  arr[49]);  //49>25196
trace ( 50 + ">" +  arr[50]);  //50>24749
trace ( 51 + ">" +  arr[51]);  //51>24856
trace ( 52 + ">" +  arr[52]);  //52>25199

или Math.ceil, тогда min не будет включен, надо будет добавлять.
Если maх или min не целые числа - округли результат.

Kikasso 13.05.2007 13:35

2all: Теперь знаю почему, и такого не повторю.
Часто мы не знаем, что больше, нам надо только получить число из диапазона.
Код:

function randRange(a:Number, b:Number):Number {
 var min:Number = Math.min( a, b);
 var max:Number = Math.max( a, b);
 return Math.floor( Math.random()*( max + 1 - min )) + min;
}}

Если нужны целые числа, надо округлять.
Код:

function randRange(a:Number, b:Number):Number {
 var min:Number = Math.ceil( Math.min( a, b));
 var max:Number = Math.floor(Math.max( a, b));
 if( max < min ) return null;
 return Math.floor( Math.random()*( max + 1 - min )) + min;
}
trace( randRange( 49, 52 )); //ok
trace( randRange( 52, 49 )); //ok
trace( randRange( 49.1, 49.2 )); //null
trace( randRange( 49.1, 50.2 )); //только 50



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

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