Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 目标C随机数_Ios_Objective C_Random_Pong - Fatal编程技术网

Ios 目标C随机数

Ios 目标C随机数,ios,objective-c,random,pong,Ios,Objective C,Random,Pong,我在做一个简单的乒乓球游戏。为了让球在新一轮开始时移动,我使用 ballVelocity = CGPointMake(4 - arc4random() % 8,4 - arc4random() % 8); 然而,重要的是: 4 - arc4random() % 8 然而,这有几个问题:首先也是最重要的是,它并没有真正生成一个随机数。只有在我退出模拟器,然后重新打开它后,才会生成新的数字。其次,我只希望它生成介于-4和-2或2和4之间的数字。您需要查看rand()函数。基本上,你用一个起始值“

我在做一个简单的乒乓球游戏。为了让球在新一轮开始时移动,我使用

ballVelocity = CGPointMake(4 - arc4random() % 8,4 - arc4random() % 8);
然而,重要的是:

4 - arc4random() % 8

然而,这有几个问题:首先也是最重要的是,它并没有真正生成一个随机数。只有在我退出模拟器,然后重新打开它后,才会生成新的数字。其次,我只希望它生成介于-4和-2或2和4之间的数字。

您需要查看
rand()
函数。基本上,你用一个起始值“播种”它,每次你调用它时它都会返回一个新的随机数

或者看看哪个有使用arc4random的完整示例。

arc4random()是iphone上首选的随机函数,而不是rand()。arc4random()不需要种子设定

此代码将生成您感兴趣的范围:

int minus2_to_minus4 = (arc4random() % 3) - 4;
int two_to_four = (arc4random() % 3) + 2;

这将为您提供一个介于-4和-2或2和4之间的浮点值

float low_bound = -4; //OR 2      
float high_bound = -2;//OR 4
float rndValue = (((float)arc4random()/0x100000000)*(high_bound-low_bound)+low_bound);
如果您想在-4…-2和2…4中输入一个数字,请尝试以下操作:

float low_bound = 2;      
float high_bound = 4;
float rndValueTemp = (((float)arc4random()/0x100000000)*(high_bound-low_bound)+low_bound);
float rndValue = ((float)arc4random()/0x100000000)<0.5?-rndValueTemp:rndValueTemp;
float low_bound=2;
浮动上限=4;
浮点rndValueTemp=((浮点)arc4random()/0x100000000)*(上限-下限)+下限);

float rndValue=((float)arc4random()/0x100000000)您需要一个随机浮点还是一个随机整数?我尝试了带种子的rand(),它仍然会生成相同的随机数,即使我也重新调用了srand(time(NULL))。我还研究了这个问题,我想这就是我已经在做的事情。rand()函数生成的数字较小(int-less unique),较长的替代方法是random(),它生成的唯一数字较多(long)。两者都是性能高效的,因为它们只播种一次。使用rand()的正确位置主要是while循环,其强度为每秒数千个随机数请求。arc4random()不需要任何种子设定,它会自动初始化自身,这会为唯一性带来一定的性能代价。在非频繁呼叫中(每秒十次)首选此选项。