【问题标题】:SFML not moving sprites correctlySFML 不能正确移动精灵
【发布时间】:2017-05-04 00:30:23
【问题描述】:

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,所以它总是在 50、50 +-1 左右
  • 我觉得自己很蠢

标签: c++ sfml


【解决方案1】:

除了提到你总是设置位置的评论之外,你还在每一帧重新创建精灵,所以即使你没有调用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();
 }
}

【讨论】:

    猜你喜欢
    • 2017-05-19
    • 2017-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-10
    • 1970-01-01
    • 1970-01-01
    • 2014-09-18
    相关资源
    最近更新 更多