Я написал два класса; Анимация и актер. По какой-то причине изображение спрайта не меняется. Он остается первым кадром все время. Код в порядке, у меня нет проблем с компиляцией, моя логика где-то неверна, и она работает не так, как я ожидал.
Объявление класса анимации:
class Animation
{
public:
Animation(std::string path, int frames);
~Animation();
void nextFrame();
void gotoStart();
bool loadFrames();
sf::Texture& getActiveFrame();
private:
int frameCount;
std::string pathToAnimation;
int currentFrame;
sf::Texture frame[];
};
Реализация класса анимации:
Animation::Animation(std::string path, int frames)
{
pathToAnimation = path;
frameCount = frames;
}
Animation::~Animation()
{
// destructor
}
void Animation::nextFrame()
{
if(currentFrame < frameCount)
{
currentFrame = 1;
}
else
currentFrame += 1;
}
void Animation::gotoStart()
{
currentFrame = 1;
}
bool Animation::loadFrames()
{
for(int i = 01; i < frameCount; i++)
{
if(!frame[i].loadFromFile(pathToAnimation + std::to_string(i) + ".jpg")) return false;
}
return true;
}
sf::Texture& Animation::getActiveFrame()
{
return frame[currentFrame];
}
Объявление класса актера:
class Actor
{
public:
Actor();
~Actor();
void setActiveAnimation(std::shared_ptr<MaJR::Animation> anim);
void draw(sf::RenderWindow& win);
private:
sf::Sprite sprite;
std::shared_ptr<MaJR::Animation> activeAnimation;
};
Реализация класса актера:
Actor::Actor()
{
// constructor
}
Actor::~Actor()
{
// destructor
}
void Actor::setActiveAnimation(std::shared_ptr<MaJR::Animation> anim)
{
activeAnimation = anim;
activeAnimation->gotoStart();
}
void Actor::draw(sf::RenderWindow& win)
{
sprite.setTexture(activeAnimation->getActiveFrame());
win.draw(sprite);
activeAnimation->nextFrame();
}
Вот код для проверки:
int main()
{
sf::RenderWindow Window(sf::VideoMode(800, 600), "MaJR Game Engine Sandbox");
std::shared_ptr<MaJR::Animation> DroneStandNorth = std::make_shared<MaJR::Animation>("./Assets/Sprites/Zerg/Units/Drone/Stand/North/", 61);
if(!DroneStandNorth->loadFrames()) return EXIT_FAILURE;
MaJR::Actor Drone;
Drone.setActiveAnimation(DroneStandNorth);
while(Window.isOpen())
{
sf::Event Event;
while(Window.pollEvent(Event))
{
if(Event.type == sf::Event::Closed)
Window.close();
}
if(sf::Keyboard::isKeyPressed(sf::Keyboard::Escape))
Window.close();
Window.clear();
Drone.draw(Window);
Window.display();
}
return 0;
}
Я совершенно не понимаю, что здесь не так. Если вы хотите скомпилировать все самостоятельно, вот исходные файлы: http://www.filedropper.com/animationtesttar Обязательно используйте -std = c ++ 0x или что-то еще, что вам нужно сделать, чтобы использовать C ++ 11 с вашим компилятором.