2014-08-27 104 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