2017-01-25 2 views
0

Ich mache ein Spiel in SFML-Bibliothek und ich versuche, die Player bewegen. Ich habe keine Ahnung, warum es sich nicht bewegt, während ich die rechte Pfeiltaste drücke.SFML Player Bewegung Problem

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); 
} 

Fühlen Sie sich frei, mir zu sagen, was soll ich in meinem Code ändern.

Antwort

0

So, hier ist das, was in der Hauptschleife ist los:

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(); 
    } 
} 

Sie setzen immer die Zeichen Position windowWidth und windowHeight, so unabhängig von Ihnen character.MoveRight() Aufruf, Sie Reseting immer die Position.

ich auch etwas würde empfehlen, für den Umgang mit Eingabesteuerungen hinzufügen, vielleicht sogar innerhalb Ihrer Player in einer update Methode platzieren, und für Ihre Ereignisschleife zu entfernen, so dass mehrmals ausführen kann und wird Ihre character.MoveRight() mehrere Male getroffen.

Letzte Ratschläge in SFML Uhr, so können Sie Ihre Charaktere reibungslos basierend auf der Zeit anstelle von Framerate bewegen.