我目前有一个从坦克发射的弹丸。目前它工作得很好,但是一旦射弹击中目标或离开屏幕,我就无法“重新使用”它们。这是我目前正在使用的代码;
//Laser Shape
sf::Texture LaserTexture;
LaserTexture.loadFromFile("images/laser.png");
std::vector<sf::Sprite>Laser(1000, sf::Sprite(LaserTexture));
这是我按下键盘时的 if 语句:
if (Event.key.code == sf::Keyboard::Space)
{
if (laserCount==1000)
{
laserCount=0;
}
/*if (sf::Keyboard::isKeyPressed(sf::Keyboard::Space))
{
}*/
laserSpeed=4;
laserCount++;
laser.play();
std::cout << "laser count = " << laserCount << std::endl;
}
还有我实际发射导弹的时钟计数器:
static float laserTimer =0.0;
laserTimer+=Clock.getElapsedTime().asSeconds();
if (laserTimer<Ldelay)
{
laserTimer = 3;
}
else {
laserTimer = 0;
}
for (int i = 0; i < laserCount; i++)
{
Laser[i].move(0, -laserSpeed);
}
这是一种非常糟糕的做法,并且优化不佳,我知道这一点。最初我试图在我的矢量中只放 50 个射弹,当它们到达屏幕顶部或击中目标时,它们会返回坦克。这根本不起作用......即使我将它们设置为相对于坦克,它们也会出现在屏幕的一侧并继续射击。
for (int i=0; i<laserCount; i++)
{
if (Laser[i].getPosition().y==0)
{
Laser[i].setPosition(xTank, yTank);
laserSpeed=0;
}
}
这会将激光放在屏幕的一侧(即使水箱位于屏幕的中间)。我用实际位置(300,200)尝试了它,但这只是给出了同样的问题,屏幕上的所有其他精灵都会冻结。
坦率地说,我只是不想拥有不必要的精灵数量!