When closing the window, I get an error code: -1073741819. What is going on here and how do I fix it? (Win7, CodeBlocks12.11, SFML2.0)
#include <SFML/Graphics.hpp>
#include <SFML/Audio.hpp>
#include <string>
#include <iostream>
int main()
{
enum Direction { Down, Left, Right, Up };
sf::Vector2i screenDimensions(800,600);
sf::RenderWindow window(sf::VideoMode(screenDimensions.x, screenDimensions.y), "SFML Game");
float frameCounter = 0, switchFrame = 100, frameSpeed = 500;
sf::Texture pTexture;
sf::Sprite playerImage;
sf::Clock clock;
sf::Font font;
sf::Music music;
sf::Vector2i source(1, Down);
if(!music.openFromFile("KingOfTheDesert.ogg"))
std::cout << "Error: Could not locate music file." << std::endl;
if(!font.loadFromFile("Gabriola.ttf"))
std::cout << "Error: Could not locate the font file." << std::endl;
if(!pTexture.loadFromFile("Player.png"))
std::cout << "Error: Could not load player image." << std::endl;
else
playerImage.setTexture(pTexture);
while (window.isOpen())
{
sf::Event Event;
while (window.pollEvent(Event))
{
switch(Event.type)
{
case sf::Event::Closed:
window.close();
case sf::Event::KeyPressed:
if(Event.key.code == sf::Keyboard::Up)
source.y = Direction::Up;
else if(Event.key.code == sf::Keyboard::Down)
source.y = Direction::Down;
else if(Event.key.code == sf::Keyboard::Left)
source.y = Direction::Left;
else if(Event.key.code == sf::Keyboard::Right)
source.y = Direction::Right;
if(Event.key.code == sf::Keyboard::P)
music.play();
if(Event.key.code == sf::Keyboard::Escape)
window.close();
}
}
source.x++;
if(source.x * 32 >= pTexture.getSize().x)
source.x = 0;
if(sf::Keyboard::isKeyPressed(sf::Keyboard::Up))
{
source.y = Up;
playerImage.move(0, -10);
}
else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Down))
{
source.y = Down;
playerImage.move(0, 10);
}
else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Right))
{
source.y = Right;
playerImage.move(10, 0);
}
else if(sf::Keyboard::isKeyPressed(sf::Keyboard::Left))
{
source.y = Left;
playerImage.move(-10, 0);
}
frameCounter += frameSpeed * clock.restart().asSeconds();
if(frameCounter >= switchFrame)
{
frameCounter = 0;
source.x++;
if(source.x * 32 >= pTexture.getSize().x)
source.x = 0;
}
playerImage.setTextureRect(sf::IntRect(source.x * 32, source.y * 32, 32, 32));
window.draw(playerImage);
window.display();
window.clear();
}
return 0;
}
switch(Event.type)
{
case sf::Event::KeyPressed:
if(Event.type == sf::Event::Closed || Event.key.code == sf::Keyboard::Escape)
window.close();
// ...
}
This would translate into: When the event type is KeyPressed, then check whether the event type is Closed OR if the key code is Escape.
As you see the event type can never be KeyPressed AND Closed, thus when you click the X, nothing happens. ;)
As for why it crashes when you press Escape, I'm not really sure...
While helping with another issue, Foaly provided me with a full main.cpp and it changed the window handling to as follows, and it works with no error!
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
if (event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::Escape)
window.close();
if (event.type == sf::Event::KeyPressed && event.key.code == sf::Keyboard::P)
{