gpt4 book ai didi

objective-c - 为 Sprite 生成随机 Y

转载 作者:行者123 更新时间:2023-11-30 18:00:20 26 4
gpt4 key购买 nike

我需要一些帮助(废话)。我想在 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 循环后返回它的原因。我知道不需要那些大括号,但我正在测试其他一些东西,这就是我把它们放在那里的原因。

这似乎不起作用。希望我清楚地表达了我想要实现的目标。如果您能提供任何帮助,我们将不胜感激。希望我没有错过一些太新手风格的东西:)

我用其他语言标记了这个问题,因为这个问题可能“无处不在”发生。

最佳答案

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

所有之前的平台都不会针对此行返回 true

if (body.tag > platformBody)

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

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

我建议逐步执行该方法,看看情况是否如此。

关于objective-c - 为 Sprite 生成随机 Y,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10590518/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com