试图让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之间的时间不足以更改数字。通常,确定地调用rand()取决于随机种子。这意味着,如果您多次调用rand(),每次将种子设置为相同的数字,则将从rand()返回相同的数字。这使所有云都具有相同的参数,因此它们彼此重叠显示,而您只能将它们视为一朵云。要解决此问题,请仅在程序开始附近调用srand()一次。另外,正如@ColonD所说,如果您使用的是C ++ 11或更高版本,则应该使用C ++随机数:https : //en.cppreference.com/w/cpp/header/random。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句