C++ 使用std::vector创建一组投射物,如何使它们一个接一个地出现?

C++ 使用std::vector创建一组投射物,如何使它们一个接一个地出现?,c++,sfml,C++,Sfml,除for循环部分外,所有代码都按预期工作,仅供参考 我不知道如何通过按1键将对象从向量中一个接一个地释放到鼠标,每次单击一个不同的对象,同时不使前一个对象消失。如果我试着把它们全部放在一个按钮上,它们会同时繁殖。这是我唯一需要帮助的事情。我相信有一个聪明的方法可以做到这一点 class Player { public: sf::RectangleShape rect; Player(sf::Vector2f position, sf::Vector2f size) { rect.se

除for循环部分外,所有代码都按预期工作,仅供参考

我不知道如何通过按1键将对象从向量中一个接一个地释放到鼠标,每次单击一个不同的对象,同时不使前一个对象消失。如果我试着把它们全部放在一个按钮上,它们会同时繁殖。这是我唯一需要帮助的事情。我相信有一个聪明的方法可以做到这一点

class Player
{
public:

sf::RectangleShape rect;

Player(sf::Vector2f position, sf::Vector2f size)
{
    rect.setPosition(position);
    rect.setSize(size);
}
。。。 这是射弹

Player crystalArrow(Player(sf::Vector2f(100,100), sf::Vector2f(30, 30)));
。。。这是向量/:

std::vector<Player> stars(5,crystalArrow);


什么是std::vertex?你是说std::vector吗?是的,我的意思是std::vector标题现在改为corect,谢谢你指出这一点;那么,会发生什么?当您按下一个键时,相应的对象被“繁殖”,即重置为300300并移动,但所有其他对象消失?在从键盘读取数毫秒后添加一些超时,以使不可能一次释放所有元素。或者,您可以检查按键是否被按下和释放,而不仅仅是检查按键是否被按下part@Daerst当按下键时,所有的物体都在一起繁殖,我刚才提到了消失,因为我想在回应中避免它,我想子弹一直飞到碰撞为止
float angle2 = atan2(mousePosition.y - bullet.y, mousePosition.x -  bullet.x);
for(int i = 0; i < stars.size(); i++)
{ 
     stars[i].rect.setTexture(&Astar);
     window.draw(stars[i].rect);


}

         if(sf::Keyboard::isKeyPressed(sf::Keyboard::A))
                  stars[0].rect.setPosition(300,300);
         if(sf::Keyboard::isKeyPressed(sf::Keyboard::S))
                  stars[1].rect.setPosition(300,300);
         if(sf::Keyboard::isKeyPressed(sf::Keyboard::D))
                  stars[2].rect.setPosition(300,300);
         if(sf::Keyboard::isKeyPressed(sf::Keyboard::F))
                  stars[3].rect.setPosition(300,300);
         if(sf::Keyboard::isKeyPressed(sf::Keyboard::G))
                  stars[4].rect.setPosition(300,300);
         stars[0].rect.move(cos(angle2)*10,sin(angle2)*10);
         stars[1].rect.move(cos(angle2)*10,sin(angle2)*10);
         stars[2].rect.move(cos(angle2)*10,sin(angle2)*10);
         stars[3].rect.move(cos(angle2)*10,sin(angle2)*10);
         stars[4].rect.move(cos(angle2)*10,sin(angle2)*10);
     for(int i = 0; i < stars.size(); i++)
     { 
     stars[i].rect.setTexture(&Astar);
     window.draw(stars[i].rect);


}

     if(sf::Keyboard::isKeyPressed(sf::Keyboard::A) && clock.getElapsedTime().asSeconds() > 0.3f && clock.getElapsedTime().asSeconds() < 0.35f)
             stars[0].rect.setPosition(Helif.rect.getPosition());
     if(sf::Keyboard::isKeyPressed(sf::Keyboard::A) && clock.getElapsedTime().asSeconds() > 0.6f && clock.getElapsedTime().asSeconds() < 0.65f)
              stars[1].rect.setPosition(Helif.rect.getPosition());
     if(sf::Keyboard::isKeyPressed(sf::Keyboard::A) && clock.getElapsedTime().asSeconds() > 0.9f && clock.getElapsedTime().asSeconds() < 0.95f)
              stars[2].rect.setPosition(Helif.rect.getPosition());
     if(sf::Keyboard::isKeyPressed(sf::Keyboard::A) && clock.getElapsedTime().asSeconds() > 1.2f && clock.getElapsedTime().asSeconds() < 1.25f)
              stars[3].rect.setPosition(Helif.rect.getPosition());
     if(sf::Keyboard::isKeyPressed(sf::Keyboard::A) && clock.getElapsedTime().asSeconds() > 1.5f && clock.getElapsedTime().asSeconds() < 1.55f)
              stars[4].rect.setPosition(Helif.rect.getPosition());
     if(clock.getElapsedTime().asSeconds() > 1.56f)
         clock.restart();
     stars[0].rect.move(cos(angle2)*10,sin(angle2)*10);
     stars[1].rect.move(cos(angle2)*10,sin(angle2)*10);
     stars[2].rect.move(cos(angle2)*10,sin(angle2)*10);
     stars[3].rect.move(cos(angle2)*10,sin(angle2)*10);
     stars[4].rect.move(cos(angle2)*10,sin(angle2)*10);`
float angle2 = atan2(mousePosition.y - bullet.y, mousePosition.x -  bullet.x);