我目前有一个从坦克射击的射弹。目前它的工作状况良好,但是一旦他们击中了目标或者离开了屏幕,我就无法“重复使用”炮弹。这是我目前使用的代码;SFML 2.0 C++射弹
//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),但这只是给出了同样的问题,屏幕上的所有其他精灵都会冻结。
坦率地说,他们只是不需要时,我只是不想有不必要的精灵数量!
嗯还好。我似乎看到你在这里得到什么,谢谢。一个简单的问题,这个代码'List particles = new List (); //空列表“这基本上是我使用的矢量?如果是这样,那么不会有一个固定的数额来阻止缓冲区溢出/通常是因为straint崩溃吗? –
2013-05-08 13:50:40
“粒子”被认为是一个包含粒子逻辑的类。例如,它有自己的更新函数,它自己的'Texture'变量,等等。所以在你的情况下,SFML已经有了一个你使用的Sprite类。我将编辑答案使其更加清晰。 – 2013-05-08 13:53:39
我现在完全理解,谢谢。 – 2013-05-08 13:55:34