Because button was pressed for multiple "ticks". If you wanna handle event - handle sf::Event. Or implement own class kinda
newState = sf::Joystick::isButtonPressed
if (oldState != newState && newState) isPressed = true;
else isPressed = false;
oldState = newState
Because button was pressed for multiple "ticks". If you wanna handle event - handle sf::Event. Or implement own class kinda
newState = sf::Joystick::isButtonPressed
if (oldState != newState && newState) isPressed = true;
else isPressed = false;
oldState = newState
what is the value for oldState initially?
But using events is much better.
Depending on situation :) I use keyboard and gamepad settings for same actions and it looks like this
bool ach::Control::check() {
bool result = false;
if (sf::Keyboard::isKeyPressed(keyCode)) {
result = true;
}
if (!useAxis) {
if (sf::Joystick::isButtonPressed(joyID, joyCode)) {
result = true;
}
} else {
if ((movAxis == 1.0f && sf::Joystick::getAxisPosition(joyID, joyAxis) > GAMEPAD_SENSETIVITY) ||
(movAxis == -1.0f && sf::Joystick::getAxisPosition(joyID, joyAxis) < -GAMEPAD_SENSETIVITY)) {
result = true;
}
}
return result;
}
void ach::ControlKey::update() {
if (!ctrl) return;
bool newState = ctrl->check();
if ( newState && newState != state) pressed = true;
else pressed = false;
if (!newState && newState != state) released = true;
else released = false;
state = newState;
}