我需要一些帮助。我想在cocos2d中为我的游戏生成一个随机的Y位置。

因此情况如下:
游戏每0.2秒产生一个平台。 iPhone / iPad处于横向模式。平台出现在屏幕的右侧(x大于宽度,以便平台出现在屏幕外部),并使用CCMoveTo开始朝屏幕的左端移动。
我为每个平台选择一个随机的Y。问题是我不想在另一个平台上产生一个平台。这意味着我需要支付未“已被收取”的费用。
到目前为止,我尝试过的代码是:

//this is a part of code from my addPlatform function. This part in particular cares for the generation of my Y coordinate.
int randY = arc4random() % (int)(3 * (winSize.height/4)); //This prevents to spawn a Y larger than 3/4 of the screen

//here I would like to loop long enough to find a good Y
while (![self isGoodPlatformY:randY])
{
    randY = arc4random() % (int)(3 * (winSize.height/4));
}


下一部分是我的isGoodPlatformY函数

- (bool)isGoodPlatformY:(int)platY
{
    CGSize winSize = [[CCDirector sharedDirector] winSize];
    int padding = 100;
    bool ok = true;
    for (CCSprite *body in [self children])
    {
        if (body.tag > platformBody)
        {
            if (body.position.x < (winSize.width - padding))
            {
                if (abs(body.position.y - platY) < 20)
                {
                    ok = false;
                }
            }
        }
    }
return ok;
}


我遍历所有具有比平台更大标签的物体。我有不同类型的平台,可以通过使用标记分开。如果身体是平台,我首先检查X坐标。如果平台足够远(填充),我可以在那个确切的位置生成一个新的平台,因此我检查下一个平台。如果不是,我要检查该平台的Y。如果在这种情况下Y坐标小于20像素,我必须找到一个新的Y,这就是为什么将布尔值设置为false并在for循环之后将其返回。
我知道不需要这些大括号,但是我正在测试其他一些东西,这就是为什么我将它们放在那里。

这似乎不起作用。希望我清楚自己想要完成的工作。您的任何帮助将不胜感激。希望我不会错过任何新手风格的东西:)

我将此问题标记为其他语言,因为此问题可能在“任何地方”发生。

最佳答案

假设所有生成的平台都具有与您提到的相同的标记,即您正在使用标记来分隔不同类型的平台。

此行的所有以前的平台都不会返回true

if (body.tag > platformBody)


因为它们都具有相同的标签,所以您将比较(1> 1)这是错误的。

因此,您的方法将始终返回YES(这是ok的默认值),并且永远不会检查平台是否相互冲突。

我建议逐步检查该方法,看看是否是这种情况。

10-06 14:54