【发布时间】:2021-02-23 16:07:33
【问题描述】:
试图让 4 朵云在屏幕上从左到右移动。当我执行时,我可以看到所有 4 个云都绘制在代码中给定的位置。但游戏开始后,只有一朵云在屏幕上移动;其他 3 个从不显示。
const int NUM_CLOUDS = 4;
Sprite clouds[NUM_CLOUDS];
int position = 0;
主要:
Texture textureCloud;
textureCloud.loadFromFile("graphics/cloud.png");
for (int i = 0; i < NUM_CLOUDS; i++)
{
clouds[i].setTexture(textureCloud);
clouds[i].setPosition(0, position);
position += 100;
}
bool cloudsActive[NUM_CLOUDS];
for (int i = 0; i < NUM_CLOUDS; i++)
{
cloudsActive[i] = false;
}
float cloudSpeed[NUM_CLOUDS];
for (int i = 0; i < NUM_CLOUDS; i++)
{
cloudSpeed[i] = 0.0f;
}
for (int i = 0; i < NUM_CLOUDS; i++)
{
if (!cloudsActive[i])
{
srand((int)time(0) * 30);
cloudSpeed[i] = (rand() % 200);
srand((int)time(0) * 30);
float height = (rand() % 450) - 150;
clouds[i].setPosition(-200, height);
cloudsActive[i] = true;
}
else
{
clouds[i].setPosition(clouds[i].getPosition().x + (cloudSpeed[i] * dt.asSeconds()), clouds[i].getPosition().y);
if (clouds[i].getPosition().x > 1920)
{
cloudsActive[i] = false;
}
}
}
【问题讨论】:
-
我不知道是不是这个原因,但你的程序应该只调用一次
srand,来为随机数生成器播种。看起来每次您需要随机数时都会重置种子,从而产生相同的随机数。此外,理想情况下,如果您使用 C++11 或更新版本,您还应该使用 C++ 的标准随机库。 -
...换句话说,您正在显示所有四朵云,但它们都具有相同的位置,因此它们看起来像一朵云,因为它们被绘制在彼此之上。