无键盘输入的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.pp(选定功能)

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

在循环之前创建图像,并在绘制之前进行更新。

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

显然,要根据自己的需要改变动作。如果移动过快或过慢,请进行较小/较大的更新。

最新更新