生成随机可达平台

时间:2014-10-04 15:03:59

标签: objective-c xcode sprite-kit

我使用arc4random()和CGPointMake在整个单视图应用程序中随机重新生成平台。

但是,我如何随机重新生成另一个平台附近的平台,以便游戏的玩家/角色可以访问?

换句话说,如果我只是随机设置,一个平台可能在左侧太远而另一个平台在右侧太远,这将使角色无法到达后一个平台。

谢谢。

2 个答案:

答案 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.如果你的随机区块比那些更远,那么它是无法到达的。

您可以添加更多规则,但关键是找出角色可以到达的位置,然后在这些区域内选择