SFML 2.1使用向量创建多个Sprite的完整解释

时间:2014-04-11 14:43:10

标签: c++ vector sprite sfml

我在代码块中使用SFML 2.1,我无法弄清楚如何使用Vectors来制作我的小行星精灵的克隆。它一直说asteroid_V尚未被声明,并且弹出一个警告框,表示它“正在使用在所选编码中非法的字符”并且它们“已被更改以保护[我]免于丢失数据”。

这个程序的目标是不断创建小行星精灵,它会在屏幕上方的随机点产生,然后直接下降。程序中还有其他精灵和方面,但我从这篇文章中删除它们以正确地压缩它。这似乎是唯一的问题。

int n;

int main()
{

    RenderWindow window;
    window.setFramerateLimit(30);
    RenderWindow mainMenu;

    srand( time(0));

    Texture asteroid_Pic;
    asteroid_Pic.loadFromFile("Asteroid.png");
    std::vector<sf::Sprite> asteroid(n, Sprite(asteroid_Pic));
    for (int i = 0; i < asteroid.size(); i++){
        asteroid[n].setOrigin(15, 15);
        asteroid[n].getPosition();
        asteroid[n].setPosition(x = rand() % 790 + 10, y = rand() % -10 - 50);
    }

    // run the program as long as the window is open
    while (window.isOpen())
    {
        // check all the window's events that were triggered since the last iteration of the loop
        Event event;
        while (window.pollEvent(event))
        {
            // "close requested" event: we close the window
            if (event.type == Event::Closed){
                window.close();
            }

            asteroid[n].setPosition(x, y+=1);
            asteroid[n].rotate(1);

            // clear the window with black color
            window.clear(Color::Black);

            // draw everything here...
            // window.draw(...);
            window.draw(player1);
            window.draw(asteroid[n]);

            // end the current frame
            window.display();
        }

        return 0;
    }

1 个答案:

答案 0 :(得分:0)

主循环中还有另一个while (window.isOpen())。你的程序将进入主循环,然后永远不会离开内循环。它至少不会画一次。

你需要摆脱内部while (window.isOpen())循环并找到另一种方式。

虽然原始问题是关于计时器的,但您可以找到游戏循环here的基本解释。如果你想根据时间做某事(移动精灵,创建新的游戏实体),你必须在循环中处理时间。