我正在生成一种您可以在 2D 屏幕中飞过的隧道。我希望墙壁从左到右随机平滑移动。现在我只是以“尖峰”结束。
我希望它看起来像这样
而不是这个
我正在为看起来像这样的墙使用代码,左右各四十次。
if (Left1.center.y > 568) {
RandomPosition = arc4random() %55;
Left1.center = CGPointMake(RandomPosition, 0);
RandomPosition = RandomPosition + 265;
Right1.center = CGPointMake(RandomPosition, 0);
}
然后是这个
RandomPosition = arc4random() %55;
Left1.center = CGPointMake(RandomPosition, 0);
RandomPosition = RandomPosition + 265;
Right1.center = CGPointMake(RandomPosition, 0);
但它并没有真正按照我想要的方式移动墙壁。
最佳答案
您正在寻找的是所谓的“相关”随机数生成。
生成此类数字的最流行方法之一称为 Perlin noise ,这对于您的需求来说可能太复杂了。
在您的情况下,最简单的做法是跟踪最后一面墙的位置,并从中生成一个随机偏移,而不是将数字生成器用于墙。这被称为 "random" or "drunken" walk .
为了保持隧道的宽度相同,只随机选择左墙的端点,然后将右墙的端点放在正确的距离之外。
CGFloat leftWallX = /* starting value */;
for( int i = 0; i < NUM_WALLS; i++ ){
// Generate a number from -MAX_OFFSET to MAX_OFFSET
CGFloat offset = (CGFloat)arc4random_uniform(2*MAX_OFFSET) - MAX_OFFSET;
leftWallX += offset;
rightWallX = leftWallX + tunnelWidth;
//...
}
关于ios - 随机生成的隧道墙,不会从一个墙跳到另一个墙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23301197/