人們告訴我縮短程序後,我做了它,這裏是與上述相同的錯誤程序的縮短版本。它只出現如果我繼續下去,程序運行良好。但是看到移動函數嗎?它不起作用。精靈拒絕任何方向移動。但是,如果我在移動中給出了一個非常大的浮點值,那麼當我啓動程序時,精靈將從它的位置移開,並且它將停留在那個位置上,而不會進一步移動。例如,如果我寫入sprite.move(400.f,400.f),精靈將從(0, 0)到(400,400)並停留在那裏。它不再移動。 下面的代碼的簡化版本:在ConsoleApplication1.exe中引發0x00000000異常:0xC0000005:訪問衝突執行位置0x00000000
#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;
}
我在代碼改進,它仍然產生相同的結果和錯誤。 使用我看到崩潰的dissassembler發生在
00B37AEE CMP ESI,在window.display ESP
()。 當我創建一個函數,並用它來顯示精靈,發生移動,但witthout恩膏虛無縹緲
您應該首先將您的運動初始化爲零向量,如果您只允許向上或向下移動< >,那麼您不需要所有如果elses可以使用if語句執行此操作,因爲您重寫了每個無論如何在運動中的元素。你等待多久才能看到你的精靈動作?要注意到任何重要的移動,你必須按住一個鍵至少3秒,以便根據移動速度移動3個像素(假設它用一個浮點矢量來存儲它的位置)。至於錯誤信息,我無法看到你的調用堆棧。 – Eddge