While LShift and RShift holding and free L(R)Shift - can't detect L(R)Shift release.
Controls and Alts all ok, only shifts can't detect.
Sfml 2.1 (vc++ 2010).
Its can be huge problem like in pinball games, where need to use exactly both shifts.
while(wIn.pollEvent(eV))
{
if(eV.type == Event::KeyReleased)
{
if(eV.key.code == Keyboard::LShift)
cout << 111 << endl;
if(eV.key.code == Keyboard::RShift)
cout << 222 << endl;
}
}
Right I did test the first issue but forgot to actually post then. ;D
Given that your example wasn't complete, I've created my own:
#include <SFML/Graphics.hpp>
#include <iostream>
int main()
{
sf::RenderWindow window({800, 600}, "Minimal Example");
window.setVerticalSyncEnabled(true);
while(window.isOpen())
{
sf::Event event;
while(window.pollEvent(event))
{
if(event.type == sf::Event::Closed)
{
window.close();
}
else if(event.type == sf::Event::KeyReleased)
{
if(event.key.code == sf::Keyboard::LShift)
std::cout << "LShift Released" << std::endl;
else if(event.key.code == sf::Keyboard::RShift)
std::cout << "RShift Released" << std::endl;
else if(event.key.code == sf::Keyboard::A)
std::cout << "A Released" << std::endl;
else if(event.key.code == sf::Keyboard::D)
std::cout << "D Released" << std::endl;
}
else if(event.type == sf::Event::KeyPressed)
{
if(event.key.code == sf::Keyboard::LShift)
std::cout << "LShift Pressed" << std::endl;
else if(event.key.code == sf::Keyboard::RShift)
std::cout << "RShift Pressed" << std::endl;
else if(event.key.code == sf::Keyboard::A)
std::cout << "A Pressed" << std::endl;
else if(event.key.code == sf::Keyboard::D)
std::cout << "D Pressed" << std::endl;
}
}
window.clear();
window.display();
}
}
If you press LShift or RShift the Pressed event will trigger correctly and keep repeating as expected and when you release it, it will register it as released.
If you start for example with pressing LShift and then start pressing RShift the RShift will start repeating as expect (e.g. open word and first hold A and then D and only D will get repeated).
Now here is what can be observed:
- If you hold LShift, then RShift, then release LShift, no LShift Released event will be triggered. The key repeating will stop for a bit, but no Released event for LShift. If you then also release RShift it will trigger a Released event for RShift.
- If you hold LShift, then RShift, then release RShift, no RShift Released event will be triggered and no key gets repeated as expected. If you then also release LShift it will trigger a Released event for LShift.
I've added the same thing for the keys A and D, they do not suffer from this and key released events get triggered properly.
I personally would never bind different actions to right and left shift, however I wonder if this is just a bug in SFML or if the OS really doesn't report the key release.