PDA

Просмотр полной версии : var i:Number = randRange( 0, 4); получаю не число (((


progman
13.05.2007, 12:24
работает:

_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