我使用arc4random()和CGPointMake在整个单视图应用程序中随机重新生成平台。
但是,我如何随机重新生成另一个平台附近的平台,以便游戏的玩家/角色可以访问?
换句话说,如果我只是随机设置,一个平台可能在左侧太远而另一个平台在右侧太远,这将使角色无法到达后一个平台。
谢谢。
答案 0 :(得分:1)
1)声明各种随机数生成函数
#define kArc4RandomMaxValue 0xFFFFFFFF
static inline double skRandf() {
return (double)arc4random_uniform(kArc4RandomMaxValue)/kArc4RandomMaxValue;
}
static inline CGFloat skRandInRange (CGFloat low, CGFloat high) {
return (skRandf() * (high - low) + low);
}
2)定义从当前平台到新平台的最小/最大距离
#define kMinDistance 100
#define kMaxDistance 200
3)根据当前平台的位置生成随机x和y值
CGFloat radius = skRandInRange(kMinDistance, kMaxDistance);
CGFloat angle = skRandf()*M_PI*2;
CGFloat x = radius * cosf(angle);
CGFloat y = radius * sinf(angle);
newPlatform.position = CGPointMake(currentPlatform.position.x+x, currentPlatform.position.y+y);
编辑:计算新平台位置的替代方法
#define kRangeX 100
#define kMinYDistance 100
#define kMaxYDistance 200
CGFloat x = skRandInRange(-kRangeX/2, kRangeX/2);;
CGFloat y = skRandInRange(kMinYDistance, kMaxYDistance);;
newPlatform.position = CGPointMake(currentPlatform.position.x+x, currentPlatform.position.y+y);
答案 1 :(得分:0)
将其分解为简单的步骤:
You want a randomly placed platform
You want a reachable platform
我假设你可以随机生成一个平台。所以,你有一个问题需要解决:玩家可以达到它吗?
你的角色能在多长时间内水平跳跃?这是你的最大X距离。他能跳得多高?这是你的Y.如果你的随机区块比那些更远,那么它是无法到达的。
您可以添加更多规则,但关键是找出角色可以到达的位置,然后在这些区域内选择