我正在使用 C++ 中的 SFML 和 MS Visual Studio 10 制作这个基于空间的射击游戏。所以,我的敌人精灵在 std::list 中声明。为了让它们无限期地出现,我在列表中使用了大尺寸。但是,这会影响性能,并最终会在一段时间后终止。因此,我选择在每次删除一个元素时将一个元素 push_back() 放入列表中,以保持列表的大小不变并无限次生成敌人。这不会影响性能。然而,每次删除一个敌方精灵时,都会在位置 (0,0) 即左上角生成一个新的精灵。因此,为了在屏幕外随机生成它们的位置,我使用了相同的 RNG,用于在程序开始时初始化它们的位置。现在,它们是在屏幕外随机生成的,但整个列表正在被删除,并且正在再次生成一个新列表。这是我的代码:
std::list<sf::Sprite>::iterator enemyit = enemy.begin(), next;
while(enemyit != enemy.end())
{
next = enemyit;
next++;
if(enemyit->getGlobalBounds().intersects(player.getGlobalBounds()))
{
enemy.erase(enemyit);
enemy.push_back(sf::Sprite(enemytex));
srand(time(NULL));
float y = -200;
for(std::list<sf::Sprite>::iterator enemyit = enemy.begin(); enemyit != enemy.end(); enemyit++)
{
float x = rand() % dist + wastage;
enemyit->setPosition(x, y);
y = y - enemyit->getGlobalBounds().height * 2;
}
}
enemyit = next;
}
显然,这是for循环。我正在迭代整个列表。如何更改它以便在只擦除一个元素时只生成一个元素?我应该设置什么条件?据我所知,我已经尝试了一切,但没有。请帮助我。