2014-08-27 102 views
0

我是編程新手,因爲我發現學習更容易,所以我在玩C++和SFML。我試圖讓一個精靈移動,但由於某種原因,我做不到。我試過了我發現的一切,但沒有運氣。任何人都知道爲什麼這不起作用?順便說一下,我正在使用Visual Studio 2012 Express和SFML 2.1。雪碧不移動

int main() 
{ 
    sf::RenderWindow window(sf::VideoMode(1000, 800), "Project"); 
    window.setFramerateLimit(30); 
    glEnable(GL_TEXTURE_2D); 
    window.clear(sf::Color::White); 
    window.display(); 
    sf::Texture charMain; 
    if (!charMain.loadFromFile("Images/playerFrontSprite.png")) 
    { 
     return 1; 
    } 
    sf::Sprite charaMain; 
    charaMain.setPosition(500.f , 500.f); 
    charaMain.setTexture(charMain); 
    window.draw(charaMain); 
    window.display(); 
    sf::Font cavefont; 
    sf::Font::Font(cavefont); 
    if (!cavefont.loadFromFile("Cave-Story.ttf")) 
     return 1; 
     while (window.isOpen()) 
     { 
      sf::Event playerAction; 
      while (window.pollEvent(playerAction)) 
      { 
       switch(playerAction.type) 
       { 
       case sf::Event::Closed: 
        window.close(); 
        break; 
       case sf::Event::KeyPressed: 
        std::cout << "sf::Event::KeyPressed" << std::endl; 
        switch(playerAction.key.code) 
        { 
        case sf::Keyboard::W: 
         charaMain.move(0 , 1); 
         break; 
        case sf::Keyboard::A: 
         charaMain.move(-1 , 0); 
         break; 
        case sf::Keyboard::S: 
         charaMain.move(0 , -1); 
         break; 
        case sf::Keyboard::D: 
         charaMain.move(1 , 0); 
         break; 
        } 
        break; 
       } 
      } 
      } 
} 

回答

3

你的問題是你移動的物體,但你沒有在它的新位置畫在屏幕上。您的繪圖代碼位於主循環之外,因此在移動精靈之後永遠不會調用它,所以您從不會看到效果。

您基本上需要在事件處理循環外部的while (window.isOpen())循環內抽取渲染代碼(即window.draw(charaMain)window.display())。

+0

它的工作!謝謝! – Aerdenhein 2014-08-27 20:54:45

+0

@Aerdenhein:沒問題!您可能需要點擊投票箱下的勾號,將其標記爲您接受的答案 - 這會讓其他人知道您的問題已解決。 – Kylotan 2014-08-27 21:09:22