我需要一些帮助(呃)。我想在cocos2d中为我的游戏生成一个随机的Y位置。
所以情况是这样的:
游戏每0.2秒生成一个平台。 iPhone / iPad处于横向模式。平台出现在屏幕右侧(x大于宽度,以便平台出现在屏幕外)并开始使用CCMoveTo
向屏幕左端移动。
我为每个平台选择一个随机的Y.问题是我不想在另一个平台上生成平台。这意味着我需要制作一个没有“已经拍摄”的randY。
我到目前为止尝试的代码是:
//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,这就是为什么将bool设置为false并在for循环后返回它。 我知道没有必要使用那些大括号,但我正在测试其他一些东西,这就是为什么我把它们放在那里。
这似乎不起作用。希望我清楚自己想要完成的事情。非常感谢您身边的任何帮助。希望我没有错过太新手的风格:)
我用其他语言标记了这个问题,因为这个问题可能“无处不在”。
答案 0 :(得分:0)
假设所有衍生平台都有与您提到的相同的标记,您使用标记来分隔不同类型的平台。
以前所有平台都不会为此行返回
if (body.tag > platformBody)
因为它们都具有相同的标记,您将比较(1> 1),这是假的。
因此,您的方法将始终返回YES(这是ok的默认值),并且永远不会检查平台是否相互冲突。
我建议单步执行该方法以查看是否属于这种情况。
答案 1 :(得分:0)
现在我发现我可以回答我自己的问题:)(愚蠢的我)。所以,是的,这个问题很久以前就得到了解决,但对于那些可能正在阅读本文的人来说,解决办法就是改变界限:
if (body.position.x < (winSize.width - padding))
要:
if (body.position.x > (winSize.width - padding))