I have looked all over for hours trying to find some type of working solution to why my sprite animation moves faster than my eyes can even recognize. Can anybody give me code that will make it look like the guy is walking instead of running like Flash?
I followed CME tutorials on youtube, but I must be seriously missing something. If you by any chance post a separate class, could you indicate how to incorporate it into the main.
#include <SFML/Graphics.hpp>
#include <SFML/Audio.hpp>
#include <string>
#include <iostream>
int main()
{
enum Direction { Down, Left, Right, Up };
sf::Vector2i screenDimensions(800,600);
sf::RenderWindow window(sf::VideoMode(screenDimensions.x, screenDimensions.y), "SFML Game");
float frameCounter = 0, switchFrame = 100, frameSpeed = 500;
sf::Texture pTexture;
sf::Sprite playerImage;
sf::Clock clock;
sf::Font font;
sf::Music music;
sf::Vector2i source(1, Down);
{
if(!music.openFromFile("KingOfTheDesert.ogg"))
std::cout << "Error: Could not locate music file." << std::endl;
}
{
if(!font.loadFromFile("Gabriola.ttf"))
std::cout << "Error: Could not locate the font file." << std::endl;
}
{
if(!pTexture.loadFromFile("Player.png"))
std::cout << "Error: Could not load player image." << std::endl;
else
playerImage.setTexture(pTexture);
}
while (window.isOpen())
{
sf::Event Event;
while (window.pollEvent(Event))
{
switch(Event.type)
{
case sf::Event::Closed:
window.close();
case sf::Event::KeyPressed:
if(Event.key.code == sf::Keyboard::Up)
source.y = Direction::Up;
else if(Event.key.code == sf::Keyboard::Down)
source.y = Direction::Down;
else if(Event.key.code == sf::Keyboard::Left)
source.y = Direction::Left;
else if(Event.key.code == sf::Keyboard::Right)
source.y = Direction::Right;
if(Event.key.code == sf::Keyboard::P)
music.play();
if(Event.key.code == sf::Keyboard::Escape)
window.close();
}
}
source.x++;
if(source.x * 32 >= pTexture.getSize().x)
source.x = 0;
if(sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
{
source.y = Up;
playerImage.move(0, -1);
}
else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
{
source.y = Down;
playerImage.move(0, 1);
}
else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
{
source.y = Right;
playerImage.move(1, 0);
}
else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
{
source.y = Left;
playerImage.move(-1, 0);
}
frameCounter += frameSpeed * clock.restart().asSeconds();
if(frameCounter >= switchFrame)
{
source.x++;
if(source.x * 32 >= pTexture.getSize().x)
source.x = 0;
frameCounter = 0;
}
playerImage.setTextureRect(sf::IntRect(source.x * 32, source.y * 32, 32, 32));
window.clear();
window.draw(playerImage);
window.display();
}
return 0;
}