精灵没有动

时间:2014-08-27 20:32:50

标签: c++ sfml

我是编程的新手,因为我觉得学习起来比较容易,所以我正在玩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;
                }
            }
            }
}

1 个答案:

答案 0 :(得分:3)

您的问题是您正在移动对象,但是您没有在屏幕上的新位置绘制它。您的绘图代码在主循环之外,因此在移动精灵后永远不会调用它,因此您永远不会看到效果。

您基本上需要在事件处理循环之外的window.draw(charaMain)循环内拉取渲染代码(即window.display()while (window.isOpen()))。