Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.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
在Objective-C中生成对象之间的约束随机距离_Objective C_Xcode - Fatal编程技术网

在Objective-C中生成对象之间的约束随机距离

在Objective-C中生成对象之间的约束随机距离,objective-c,xcode,Objective C,Xcode,我正在做一个游戏,玩家在不同高度的平台上移动,每个平台之间的距离不同。因为我希望游戏每次都不一样,所以我编写了代码来自动生成玩家传递到玩家前面某个位置的ice float viewHeight = self.view.bounds.size.height; float fViewHeightMinusIceHeight = viewHeight – 55.0f; int iViewHeightMinusIceHeight = (int)fViewHeightMinusIceHeight; if

我正在做一个游戏,玩家在不同高度的平台上移动,每个平台之间的距离不同。因为我希望游戏每次都不一样,所以我编写了代码来自动生成玩家传递到玩家前面某个位置的ice

float viewHeight = self.view.bounds.size.height;
float fViewHeightMinusIceHeight = viewHeight – 55.0f;
int iViewHeightMinusIceHeight = (int)fViewHeightMinusIceHeight;

if (ice.center.x >= (self.view.bounds.size.width + 8)) 
    {
    float y = random() %iViewHeightMinusIceHeight;
    y = y + 22.5f;
    float x = (random() % 20) – 8;
    ice.center = CGPointMake(x,y);
    }
这只是其中一个对象。相同的代码用于ice1、ice2等

这样就可以很好地生成对象。第一个问题是,我想将可能性限制在合理的结果上,例如,没有巨大的差距,这样玩家就可以从一个对象移动到另一个对象


第二个问题是,有时对象会相互叠加生成。

对于您的范围来说,简单的最小值/最大值似乎是理想的。大意是:

#define kMinDistanceBetween 10
#define kMaxDistanceBetween 20

int variance = kMaxDistanceBetween - kMinDistanceBetween;
float xPosition = (float)(kMinDistanceBetween + arc4random_uniform(variance));

arc4random_uniform在您传递的上限内返回一个随机整数。因此,您只需根据设置的最小/最大规则,将X位置设置为最小+随机数量。我将其设置为defines,以便您可以在一个地方修改规则。您必须强制转换为浮点,因为arc4random_uniform返回一个int。

的可能重复请看我的回答:为什么使用宏而不是常量?我认为任何一种方法都可以,只是注意它应该以某种方式参数化,而不是硬编码。