我正在使用 Xcode 6 开发一款游戏,每次 2 个特定对象相互接触时都需要生成一个新的随机数。我曾尝试在我的应用程序开始时使用 srand(),但似乎值保持不变,就好像它没有在每次对象碰撞时播种新值一样。
这是代码
if((CGRectIntersectsRect(Stickman.frame, Box1.frame))) {
xRan = arc4random()%11;
if(xRan<=3){
Spike1 = true;
[self SpikeCall];
}
//Gold
if (xRan==10) {
G1 = true;
}
Box1.center = CGPointMake(0,278);
Box1SideMovement = 5;
}
问题是,当 Stickman 击中 Box1 后,当它返回屏幕时,它在 xRan 中仍然保持相同的值,除了某些情况下它会在 1-3 之间,然后它使 Spike1 为真。我希望它是这样的,每次对象 Box1 与 Stickman 相交时,xRan 都会在 1-10 之间播种一个新数字,这样 G1 变为真的概率为十分之一,如果 xRan 为 1-3,它将使Spike1 是真的。
最佳答案
这与其说是答案,不如说是评论,但对于评论来说太长了。
您的方法存在一些问题。首先,srand
不会为 arc4random
函数提供种子。它为 rand
函数提供了种子,这是一个不同的伪随机数生成器,其属性比 arc4random
稍差。 arc4random
没有明确的播种函数。其次,如果您想要 1 到 10 之间的随机数,则不应使用 % 11
方法。这会给你一个 0 到 10 之间的随机数(我认为你不想要零),但它也可能不会给你一个均匀的分布。即使 arc4random
擅长在其整个范围内提供均匀分布,它也可能无法提供最低有效位的均匀分布。
我建议你使用类似的东西:
arc4random_uniform(10) + 1
arc4random_uniform(10)
将返回一个介于 0 和 9 之间的数字,并将很好地提供该范围内的均匀分布。 +1
只是改变你的间隔,所以你得到 1 到 10 之间的数字,而不是 0 到 9 之间的数字。
关于ios - 种子随机数 Objective-C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30765473/