SFML无法正确移动精灵

SFML not moving sprites correctly

本文关键字:移动 精灵 SFML      更新时间:2023-10-16

sfml不会将精灵移动超过1像素(即使持有(。它还在释放被固定的箭头钥匙时将精灵移回其设定位置。

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

在评论中提到您始终设置位置,您还在每个帧中重新创建精灵,因此即使您调用setPosition

,它的位置也将始终重置

作为旁注,您还在每个帧加载纹理,这非常低效!

这应该是您所追求的:

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