Advertisement
Guest User

SFML movement

a guest
Jul 14th, 2014
280
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.38 KB | None | 0 0
  1. #include <SFML/Graphics.hpp>
  2. #include <vector>
  3. #include <cstdlib>
  4. #include <ctime>
  5.  
  6. class Game {
  7.   public:
  8.     Game();
  9.     void run();
  10.  
  11.   private:
  12.     void processEvents();
  13.     void handleUserInput(sf::Keyboard::Key key, bool isPressed);
  14.     void update(sf::Time deltaTime);
  15.     void render();
  16.  
  17.   private:
  18.       static const sf::Time TimePerFrame;
  19.       static const float PlayerSpeed;
  20.       sf::RenderWindow mWindow;
  21.       sf::View mView;
  22.  
  23.       std::vector<sf::RectangleShape> mRectangles;
  24.       sf::RectangleShape mPlayer;
  25.       bool mIsMovingUp;
  26.       bool mIsMovingDown;
  27.       bool mIsMovingLeft;
  28.       bool mIsMovingRight;
  29. };
  30. const sf::Time Game::TimePerFrame = sf::seconds(1.f/60.f);
  31. const float Game::PlayerSpeed = 150.f;
  32.  
  33. Game::Game()
  34. : mWindow(sf::VideoMode(800, 600), "Test")
  35. , mIsMovingUp(false)
  36. , mIsMovingDown(false)
  37. , mIsMovingLeft(false)
  38. , mIsMovingRight(false)
  39. {
  40.     mView = mWindow.getView();
  41.  
  42.     mPlayer.setPosition(100.f, 100.f);
  43.     mPlayer.setSize(sf::Vector2f(10.f, 10.f));
  44.     mPlayer.setFillColor(sf::Color::Green);
  45.  
  46.     //create some shapes just for viewing
  47.     float pos_x;
  48.     float pos_y = 20.f;
  49.     for (int i = 0; i < 20; i++)
  50.     {
  51.         pos_x = rand()%800;
  52.         pos_y = rand()%600;
  53.  
  54.         sf::RectangleShape rect;
  55.         rect.setPosition(pos_x, pos_y);
  56.         rect.setSize(sf::Vector2f(20.f, 20.f));
  57.         mRectangles.push_back(rect);
  58.     }
  59. }
  60.  
  61.  
  62. void Game::run()
  63. {
  64.     mWindow.setVerticalSyncEnabled(true); //can be changed later to take from config file
  65.  
  66.     sf::Clock clock;
  67.     sf::Time timeSinceLastUpdate = sf::Time::Zero;
  68.     while (mWindow.isOpen())
  69.     {
  70.         sf::Time elapsedTime = clock.restart();
  71.         timeSinceLastUpdate += elapsedTime;
  72.         while (timeSinceLastUpdate > TimePerFrame)
  73.         {
  74.             timeSinceLastUpdate -= TimePerFrame;
  75.             processEvents();
  76.             update(TimePerFrame);
  77.         }
  78.         render();
  79.     }
  80. }
  81.  
  82. void Game::handleUserInput(sf::Keyboard::Key key, bool isPressed)
  83. {
  84.     if (key == sf::Keyboard::W)
  85.         mIsMovingUp = isPressed;
  86.     else if (key == sf::Keyboard::S)
  87.         mIsMovingDown = isPressed;
  88.     else if (key == sf::Keyboard::A)
  89.         mIsMovingLeft = isPressed;
  90.     else if (key == sf::Keyboard::D)
  91.         mIsMovingRight = isPressed;
  92. }
  93.  
  94. void Game::processEvents()
  95. {
  96.     sf::Event event;
  97.     while (mWindow.pollEvent(event))
  98.     {
  99.         switch(event.type)
  100.         {
  101.             case sf::Event::KeyPressed:
  102.                 handleUserInput(event.key.code, true);
  103.                 break;
  104.             case sf::Event::KeyReleased:
  105.                 handleUserInput(event.key.code, false);
  106.                 break;
  107.             case sf::Event::Closed:
  108.                 mWindow.close();
  109.                 break;
  110.         }
  111.     }
  112. }
  113.  
  114. void Game::update(sf::Time deltaTime)
  115. {
  116.     sf::Vector2f movement(0.f, 0.f);
  117.     if (mIsMovingUp)
  118.         movement.y -= PlayerSpeed;
  119.     if (mIsMovingDown)
  120.         movement.y += PlayerSpeed;
  121.     if (mIsMovingLeft)
  122.         movement.x -= PlayerSpeed;
  123.     if (mIsMovingRight)
  124.         movement.x += PlayerSpeed;
  125.     mPlayer.move(movement*deltaTime.asSeconds());
  126. }
  127.  
  128.  
  129. void Game::render()
  130. {
  131.     mWindow.clear();
  132.  
  133.     mView.setCenter(mPlayer.getPosition());
  134.     mWindow.setView(mView);
  135.  
  136.     mWindow.draw(mPlayer);
  137.     for (int i = 0; i < mRectangles.size(); i++)
  138.         mWindow.draw(mRectangles[i]);
  139.     mWindow.display();
  140. }
  141.  
  142. int main()
  143. {
  144.     srand(time(NULL));
  145.     Game game;
  146.     game.run();
  147.     return 0;
  148. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement