【发布时间】:2018-10-18 22:25:52
【问题描述】:
如何使用这段代码为精灵设置动画?我知道我应该添加什么时间延迟,但是怎么做呢?我使用对象数组来快速变化。还是一种不合理的动画方式?
#include <SFML/Graphics.hpp>
#include <iostream>
using namespace std;
sf::RenderWindow window(sf::VideoMode(600, 400), "!!!");
void animation()
{
sf::Texture arrayOfTexture[9];
sf::Sprite imageOfLamp;
arrayOfTexture[0].loadFromFile("1.png");
arrayOfTexture[1].loadFromFile("2.png");
arrayOfTexture[2].loadFromFile("3.png");
arrayOfTexture[3].loadFromFile("4.png");
arrayOfTexture[4].loadFromFile("5.png");
arrayOfTexture[5].loadFromFile("6.png");
arrayOfTexture[6].loadFromFile("7.png");
arrayOfTexture[7].loadFromFile("8.png");
arrayOfTexture[8].loadFromFile("9.png");
for(;;)
{
for(int i= 0;i <=8;i++)
{
imageOfLamp.setTexture(arrayOfTexture[i]);
window.draw(imageOfLamp);
}
for(int i =8;i >=0;i--)
{
imageOfLamp.setTexture(arrayOfTexture[i]);
window.draw(imageOfLamp);
}
}
}
【问题讨论】:
-
感觉就像你跳过了一两节课。您应该预先/后台加载图像,打开磁盘上的文件需要大量时间。您应该查看如何使用
sf::clock/sf::time管理时间并利用这些来决定应该在当前帧上渲染哪个灯,通常当我们发现自己使用无限循环时,我们做错了。跨度> -
您还应该尝试将动画的所有纹理组合在一个文件中,因此您只需切换texture rectangle