【发布时间】:2017-05-15 20:38:09
【问题描述】:
在人们告诉我缩短程序后,我就这样做了,这是程序的缩短版本,与上述相同的错误。它只在进入程序几分钟后出现。如果我点击继续,程序工作正常.但是看到运动功能吗?它不起作用。精灵拒绝向任何方向移动。但是,如果我在移动中给出一个非常大的浮动值,那么当我启动程序时,精灵就会从它的位置移位停留在那个位置,没有进一步的移动。例如,如果我写 sprite.move(400.f,400.f),精灵会从 (0,0) 移动到 (400,400) 并停留在那里。它不会移动任何更多的。 这是代码的简化版本:
#include"SFML\Graphics.hpp"
#include<iostream>
int main()
{
sf::RenderWindow window(sf::VideoMode(640, 480), "CHECK",sf::Style::Default);
std::cout << "WORKS";
sf::Texture text;
text.loadFromFile("bahamut.png");
sf::Sprite sprite;
sf::Clock frap;
sprite.setTexture(text);
while (window.isOpen())
{
float fps = frap.restart().asSeconds();
sf::Vector2f movements;
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::A))
{
movements.y = 0;
movements.x = -1 * fps;
}
else
{if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::D))
{
movements.y = 0;
movements.x = 1 * fps;
}
else
{ if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::S))
{
movements.y = 1 * fps;
movements.x = 0;
}
else
{
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Key::W))
{
movements.y = -1 * fps;
movements.x = 0;
}
else
{
movements.x = 0;
movements.y = 0;
}
}
}
}
sprite.move(movements);
window.clear();
window.draw(sprite);
window.display();
}
return 0;
}
我改进了代码,它仍然产生相同的结果和错误。 在使用反汇编程序时,我看到崩溃发生在
00B37AEE cmp esi,esp
在 window.display() 中。
当我创建一个函数并使用它来显示精灵时,运动会发生但没有 unction nada
【问题讨论】:
-
你应该首先将你的移动初始化为零向量,如果你只允许 向上或向下移动,你不需要所有的 if else 你可以用 just if 来做到这一点声明,因为无论如何您都在覆盖运动中的每个元素。你等多久才能看到你的精灵移动?要注意到任何显着的移动,您必须按住一个键至少 3 秒钟才能看到他根据您的移动速度移动 3 个像素(假设它使用浮点向量存储其位置......)。至于报错信息,不看你的调用栈,我也做不了什么。
标签: visual-c++ visual-studio-2015 sfml