Пользовательское управление в sfml

357
26 мая 2017, 14:56

Возникли проблемы в управлении спрайтом. Коды клавиш управления храню в (int keyLeft, keyRight), они могут изменяться. Появляется системная задержка винды перед непрерывным вводом клавиши. Если цикл while закрываю после строки window.close(), спрайт движется постоянно влево или вправо после однократного нажатия клавиши.

while (window.pollEvent(event)) {
            if (event.type == sf::Event::Closed)
                window.close();
        if (sf::Event::KeyPressed) {
            if(event.key.code==keyLeft) ball.x-=15+platSpeed/2,0;
            else if(event.key.code==keyRight) ball.x+=15+platSpeed/2,0;
            else if(event.key.code==27) menu(window, text);
        }
        }
Answer 1

Попробуйте использовать sf::Keyboard::isKeyPressed(), вместо Event. Также цикл проверки события "Closed" лучше делать отдельно от обработки. Например вот так:

struct Keys {
    sf::Keyboard::Key keyLeft = sf::Keyboard::A;
    sf::Keyboard::Key keyRight = sf::Keyboard::D;
    sf::Keyboard::Key keyMenu = sf::Keyboard::F;
} keys;
while (window.isOpen()) {
    while (window.pollEvent(event)) {
        if (event.type == sf::Event::Closed)
            window.close();
    }
    if(sf::Keyboard::isKeyPressed(keys.keyLeft)) 
        ball.x-=15+platSpeed/2,0;
    if(sf::Keyboard::isKeyPressed(keys.keyLeft)) 
        ball.x+=15+platSpeed/2,0;
    if(sf::Keyboard::isKeyPressed(keys.keyMenu)) 
        menu(window, text);
}
READ ALSO
как сконвертировать 2 байта hex Buffer в int

как сконвертировать 2 байта hex Buffer в int

есть вот такой буфер hex-значений - fe ff 03 99 00 01

315
Получение аудио-стрима через Chrome Extension

Получение аудио-стрима через Chrome Extension

Нужно получить аудио-стрим микрофона (не звука во вкладке, а именно микрофона) через расширение ChromeОбычный navigator

445
Как получить текст из редактора?

Как получить текст из редактора?

Использую этот редактор

380