In my program KeyPressed (start holding a key) is not working but KeyReleased (release the key) is. I've done similar things before and I'm sure this is supposed to work. Here is the relevant part of the code.
...
while (app->IsOpened())
{
...
sf::Event ev;
...
if (ev.Type == sf::Event::KeyPressed)
{
if (ev.Key.Code == sf::Key::W)
{
exit(0); // not working
}
}
if (ev.Type == sf::Event::KeyReleased)
{
if (ev.Key.Code == sf::Key::W)
{
exit(0); // working
}
}
...
}
...
Here is the while thing.
#include <iostream>
#include <windows.h>
#include <time.h>
#include "SFML\Graphics.hpp"
#include "SFML\Window.hpp"
sf::Window* openGL_setup()
{
// Set color and depth clear value
glClearDepth(1.f);
glClearColor(0.f, 0.f, 0.f, 0.f);
// Enable Z-buffer read and write
glEnable(GL_DEPTH_TEST);
glDepthMask(GL_TRUE);
// Setup a perspective projection
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(90.f, 1.f, 1.f, 500.f);
sf::WindowSettings window_settings;
window_settings.DepthBits = 24;
window_settings.StencilBits = 8;
window_settings.AntialiasingLevel = 0;
return new sf::Window(sf::VideoMode(1200, 800, 32), "", sf::Style::Close, window_settings);
}
void per_frame_openGL_setup()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
void main()
{
sf::Window* app = openGL_setup();
// framerate
double target_seconds_per_frame = 0.02; // or "... = 1 / fps"
double frame_start_time;
while (app->IsOpened())
{
frame_start_time = clock();
sf::Event ev;
while (app->GetEvent(ev))
{
}
if (ev.Type == sf::Event::Resized)
{
glViewport(0, 0, ev.Size.Width, ev.Size.Height);
}
if (ev.Type == sf::Event::Closed)
{
app->Close();
}
if (ev.Type == sf::Event::KeyPressed)
{
if (ev.Key.Code == sf::Key::W)
{
exit(0); // not working
}
}
if (ev.Type == sf::Event::KeyReleased)
{
if (ev.Key.Code == sf::Key::W)
{
exit(0); // working
}
}
app->SetActive();
per_frame_openGL_setup();
// replace this line with drawing stuff
app->Display();
// framerate
double seconds_for_last_frame = (clock() - frame_start_time) / CLOCKS_PER_SEC;
double sleep_time_for_frame_in_seconds = target_seconds_per_frame - seconds_for_last_frame;
if (sleep_time_for_frame_in_seconds < 0)
{
sleep_time_for_frame_in_seconds = 0;
}
Sleep(sleep_time_for_frame_in_seconds * 1000);
}
}