2017-05-04 5 views
1

SFML verschiebt die Sprites nicht um mehr als 1 Pixel (selbst wenn sie gehalten werden). Außerdem verschiebt es das Sprite zurück in seine festgelegte Position, wenn die gedrückte Pfeiltaste losgelassen wird.SFML bewegt Sprites nicht korrekt

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

Sie immer 'setPosition' fordern, so dass es immer um die 50 sein werden, 50 + -1 – vu1p3n0x

+0

ich sehr dumm fühlen –

Antwort

1

Auf den Kommentar zu erwähnen, dass Sie die Position immer gesetzt, sind Sie auch neu zu erstellen, das Sprit jeden Rahmen, so dass er Position ist immer noch ohne Sie zurückgesetzt wird Rufen Sie

Als Randnotiz, Sie laden auch die Textur jedes Frame, was sehr ineffizient ist!

Dies sollte sein, was Sie nach:

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