使用std :: vector创建一堆射弹,如何让它们一个接一个地出现?

时间:2015-01-22 15:32:24

标签: c++ sfml

除了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);

...

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);

0 个答案:

没有答案