我是编程的新手,因为我觉得学习起来比较容易,所以我正在玩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;
}
}
}
}
答案 0 :(得分:3)
您的问题是您正在移动对象,但是您没有在屏幕上的新位置绘制它。您的绘图代码在主循环之外,因此在移动精灵后永远不会调用它,因此您永远不会看到效果。
您基本上需要在事件处理循环之外的window.draw(charaMain)
循环内拉取渲染代码(即window.display()
和while (window.isOpen())
)。