【发布时间】:2016-03-06 00:02:49
【问题描述】:
我目前正在开展一个项目,该项目基本上是排序算法的可视化,以解释它们的工作原理(而不是概述)。我是使用 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;
}
【问题讨论】:
-
每次需要重绘时都更新图像有什么问题?
-
它需要从它的原始位置平滑地移动到排序区域。重新绘制精灵会使动画变得不连贯。
-
您必须重新绘制精灵以使其移动。如果动画太不稳定,要么是你重绘它的速度不够快,要么是你改变它的位置太快了。
-
你能举个例子吗?