2017-05-04 2 views
1

SFML ne déplace pas les sprites de plus de 1 pixel (même s'il est maintenu). Il ramène également le sprite dans sa position de départ lorsque la touche fléchée est relâchée.SFML ne déplace pas correctement les sprites

void Engine::mainLoop() { 
    //Loop until window is closed 
    while (window->isOpen()) { 
      processInput(); 
      update(); 
      sf::Sprite test; 
      sf::Texture texTest; 
      texTest.loadFromFile("img.png"); 
      test.setTexture(texTest); 
      test.setPosition(50, 50); 
      if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Up)) 
       test.move(0, -1); 
      if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Down)) 
       test.move(0, 1); 
      if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Left)) 
       test.move(-1, 0); 
      if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Right)) 
       test.move(1, 0); 
      window->clear(sf::Color::Black); 
      window->draw(test); 
      renderFrame(); 
      window->display(); 
    } 
} 

+1

vous appelle toujours 'setPosition' il sera toujours autour de 50, 50 + -1 – vu1p3n0x

+0

je me sens très stupide –

Répondre

1

En plus du commentaire de mentionner que vous avez toujours définir la position, vous recréer aussi l'image-objet chaque image, de sorte que sa position sera toujours remise à zéro, même sans vous En appelant

En note, vous chargez également la texture de chaque image, ce qui est très inefficace!

Cela devrait être ce que vous êtes après:

void Engine::mainLoop() { 
    sf::Sprite test; 
    sf::Texture texTest; 
    texTest.loadFromFile("img.png"); 
    test.setTexture(texTest); 
    test.setPosition(50, 50); 

//Loop until window is closed 
while (window->isOpen()) { 
     processInput(); 
     update(); 
     if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Up)) 
      test.move(0, -1); 
     if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Down)) 
      test.move(0, 1); 
     if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Left)) 
      test.move(-1, 0); 
     if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::Right)) 
      test.move(1, 0); 
     window->clear(sf::Color::Black); 
     window->draw(test); 
     renderFrame(); 
     window->display(); 
} 
}