对于我从SFML站点抓取的示例代码到目前为止所添加的几乎所有对象(sf :: Color,sf :: Image,sf :: Texture等),都会抛出异常一旦我运行它,达到以下协议:
gameboiss.exe中0x61C71B86(sfml-system-2.dll)的未处理异常:0xC0000005:访问冲突读取位置0x00000074。
出于某种原因,它引用了RenderWindow行。如果我删除引用这些对象的所有行,它将起作用。即使我只留下一行创建变量(即sf :: Texture纹理),仍会抛出异常。我在调试中查看当地人/汽车时尝试过多种方法,但它似乎没什么用呢。
我正在使用Visual Studio 2012,任何帮助都会受到关注。下面是代码。谢谢:))
#include <iostream>
#include "SFML/Window.hpp"
#include "SFML/Graphics.hpp"
#include "SFML/System.hpp"
int main(){
sf::RenderWindow window(sf::VideoMode(200,200), "game boi");
sf::CircleShape shape(100.f);
//source of error
sf::Texture texture;
texture.loadFromFile("char\\spartapix.png");
/*if(!hero.loadFromFile("char\\spartapix.png")){
std::cerr << "Error: sprite not loaded.\n";
return 1;
}*/
//sf::Image background;
//if (!background.loadFromFile("background.jpg"))
//return -1;
shape.setFillColor(sf::Color::Blue);
sf::Vector2i pos;
while (window.isOpen()){
sf::Event event;
while (window.pollEvent(event)){
if (event.type == sf::Event::Closed)
window.close();
if (event.type == sf::Event::GainedFocus)
std::cout << "playing";
if (event.type == sf::Event::LostFocus)
std::cout << "notplaying\n";
if (event.type == sf::Event::MouseButtonPressed){
sf::Vector2i pos = sf::Mouse::getPosition(window);
std::cout << pos.x << " " << pos.y << std::endl;
}
if (event.type == sf::Event::KeyPressed){
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Left)){
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Right)){
}
if (sf::Keyboard::isKeyPressed(sf::Keyboard::Escape)){
window.close();
}
}
}
window.clear();
window.draw(shape);
window.display();
}
return 0;
}
<code>
答案 0 :(得分:0)
我同意RetiredNinja上面的评论:如果一旦你创建了渲染窗口就会发生这种情况,那么它很可能是一些STL版本差异(来自传递的字符串;因为sf::String
是 sfml-system )的一部分,通常是混合版本时的情况(Visual Studio版本或发布/调试版本)。
您确定自己选择了correct download from SFML's download page吗?作为替代方案,您可以尝试从official repository下载和编译SFML。