没有键盘输入的SFML动画

时间:2015-12-01 22:00:30

标签: c++ opengl sfml

我正在研究一个项目,它基本上是排序算法的可视化,用于解释它们的工作原理(而不是概述)。我是新手使用SFML(甚至OpenGL)并且对库的使用经验有限,但我想要做的是将绘制的精灵移动到不同的位置以显示排序。我查看了教程和示例,但是他们都接受了键盘输入来移动精灵 - 这个项目中没有使用的东西。有谁知道如何实现这个目标?

这是当前的代码:

DrawCups.h

class DrawCups
{
public:
    DrawCups(sf::RenderWindow& window);
    ~DrawCups();

    void loadImage(const char* pathname, sf::Texture& texture, sf::Sprite& sprite);

    void drawCup1();

private:
    sf::RenderWindow& _window;
};

DrawCups.cpp(选定功能)

void DrawCups::drawCup1()
{
    // load our image
    sf::Texture cup1;        // the texture which will contain our pixel data
    sf::Sprite cup1Sprite;         // the sprite which will actually draw it
    loadImage("./images/InsertionSort/red_cup_1.png", cup1, cup1Sprite);
    cup1Sprite.setPosition(sf::Vector2f(150, 230));
    _window.draw(cup1Sprite);
}

的main.cpp

int main()
{
    sf::RenderWindow window(sf::VideoMode(1366, 768), "Sorting Algorithm Visualisation: SFML");
    window.setFramerateLimit(60);

    while (window.isOpen())
    {
        sf::Event event;
        while (window.pollEvent(event))
        {
            if (event.type == sf::Event::Closed)
                window.close();
        }
        window.clear(sf::Color::White);
        DrawCups drawToWindow(window);;
        drawToWindow.drawCup1();
        window.display();
    }

    return 0;
}

1 个答案:

答案 0 :(得分:1)

在循环之前创建图像并在绘制之前更新它。

DrawCups drawToWindow(window); //Constructor creates the sprite

while (window.isOpen())
{
    ...
    drawToWindow.update(); //Update the position

    //Redraw
    window.clear(sf::Color::White);
    drawToWindow.drawCup1();
    window.display();
}

我不确定你想要什么类型的动作,但更新功能可以是这样的:

void DrawCups::update()
{
    sf::Vector2f pos = this->cup1Sprite.getPosition();
    pos.x++; //Move 1 pixel to the left
    this->cup1Sprite.setPosition(pos);
}

显然改变运动以满足您的需求。如果移动太快或太慢,请进行更小/更大的更新。