2017-01-25 1 views
0

Je fais un jeu dans la bibliothèque SFML et j'essaie de faire le Player déplacer. Je n'ai aucune idée pourquoi il ne bouge pas tout en appuyant sur la touche fléchée droite.SFML Player mouvement numéro

Game.cpp

#include "Game.h" 

Game::Game() 
{ 
windowWidth = 800; 
windowHeight = 600; 
} 

Game::~Game() 
{ 
} 

void Game::Start() 
{ 
window.create(sf::VideoMode(windowWidth, windowHeight), "Game"); 
window.setFramerateLimit(60); 

while (window.isOpen()) 
{ 
    sf::Event e; 
    while (window.pollEvent(e)) 
    { 
     if (e.type == sf::Event::Closed || sf::Keyboard::isKeyPressed(sf::Keyboard::Escape)) 
     { 
      window.close(); 
     } 
     else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)) 
     { 
     } 
     else if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right)) 
     { 
      character.MoveRight(); 
     } 
    } 

    character.SetPosition(windowWidth, windowHeight); 
    character.UpdatePosition(); 
    Draw(); 
} 
} 

void Game::Draw() 
{ 
window.clear(); 

character.DrawPlayer(window); 

window.display(); 
} 

Player.cpp

#include "Player.h" 

Player::Player() 
{ 
player.setSize(sf::Vector2f(200, 50)); 
player.setFillColor(sf::Color::White); 

playerX = 300; 
playerY = 300; 
playerSpeed = 5.f; 
} 

Player::~Player() 
{ 
} 

void Player::MoveRight() 
{ 
playerX += playerSpeed; 
} 

void Player::SetPosition(float windowWidth, float windowHeight) 
{ 
playerX = windowWidth/2 - 100; 
playerY = windowHeight - 50; 
} 

void Player::UpdatePosition() 
{ 
player.setPosition(playerX, playerY); 
} 

void Player::DrawPlayer(sf::RenderWindow &window) 
{ 
window.draw(player); 
} 

Ne hésitez pas à me dire ce que dois-je changer dans mon code.

Répondre

0

Voici donc ce qui se passe dans votre boucle principale:

character.SetPosition(windowWidth, windowHeight); // Put this line to get a start location 
    while (window.isOpen()) 
    { 
     sf::Event e; 
     while (window.pollEvent(e)) 
     { 
      // your code... 
     } 

     character.SetPosition(windowWidth, windowHeight); // <---- Remove this line 
     character.UpdatePosition(); 
     Draw(); 
    } 
} 

Vous définissez en permanence la position des personnages à windowWidth et windowHeight, donc peu importe qui vous appelle character.MoveRight(), vous reseting toujours la position.

Je recommande également d'ajouter quelque chose pour le traitement des commandes d'entrée, peut-être même de les placer à l'intérieur de votre Player dans une méthode update, et les retirer de votre boucle d'événements, qui peuvent exécuter plusieurs fois et frappera vos character.MoveRight() plusieurs fois.

Dernier conseil sur l'horloge de SFML, vous pouvez ainsi déplacer vos personnages en douceur en fonction du temps et non de l'image.