Еденичное нажатие клавиши

В этой теме 8 ответов, 5 участников, последнее обновление  1nquisitor 3 года/лет, 6 мес. назад.

Просмотр 9 сообщений - с 1 по 9 (из 9 всего)
  • Автор
    Сообщения
  • #396

    1nquisitor
    Участник
    Сообщений:2

    Зарегистрирован:
    19.04.2015

    Репутация:0

    Как известно, во время нажатия клавиши, событие в лупе возникает несколько раз. Вычитал в справочнике, что для того чтобы это обойти, существует метод

    только он у меня чего то не срабатывает, я что то делаю не так?
    вот мой код-

    #398
    MVRKUS
    MVRKUS
    Участник
    Сообщений:26

    Зарегистрирован:
    07.04.2015

    Репутация:1

    Как я понял, это работает в зависимости от кадров в секунду
    То есть, клавиша и срабатывает всего раз, но это за кадр
    И так за каждый кадр по разу
    Это я понял, ограничив кадры методом

    Попробуй создать переменную, проверяющую единоразовое выполнение действия

    #399
    Павел Букреев
    Павел Букреев
    Хранитель
    Сообщений:586

    Зарегистрирован:
    04.01.2015

    Репутация:104

    Быть может стоит создать bool переменную, которая будет false сразу после нажатия и позволит нажать на клавишу если она true.

    Как пример может быть стоит посмотреть вот здесь: sfml урок вывод инфы по нажатию клавиши , возможно поможет

    #400

    1nquisitor
    Участник
    Сообщений:2

    Зарегистрирован:
    19.04.2015

    Репутация:0

    Попробовал- не катит, зараза ;(

    #401

    1nquisitor
    Участник
    Сообщений:2

    Зарегистрирован:
    19.04.2015

    Репутация:0

    Павел, пробовал твоим методом- работает, но клавиши нужно ООчень кратковременно нажимать, иначе определяет как два нажатия

    #402
    Павел Букреев
    Павел Букреев
    Хранитель
    Сообщений:586

    Зарегистрирован:
    04.01.2015

    Репутация:104

    Странно. Ну крайний случай – можно использовать таймер.

    #573
    MicroSDA
    MicroSDA
    Участник
    Сообщений:64

    Зарегистрирован:
    24.04.2015

    Репутация:22

    Когда мне нужно было вводить информацию, я искал читал и пришел к выводу что Sfml не предоставляет формы для ввода. После долгих раздумий как реализовать ввод информации так чтоб это ещё и отображалось на экране  придумал вод что (это очень глупо но всё же мне помогло ):

    Создал главную строковую переменную типа String input;

    Для каждой кнопки я создал отдельную переменную string Q =”Q”;// и так для каждой буквы

    Потом цикл Ifфов по поводу нажатия той или иной кнопки и к главной переменной input я прибавлял переменную то что ввел, и сразу отрисовывал на экран в виде текста .

    Возникла такая же проблема а именно при нажатии одной кнопки мне печатало их сразу по 20-50.

    Я добавил в If(Keyboard::isKeyPressed(Keyboard::Q){input=input+Q;  while Keyboard::isKeyPressed(Keyboard::Q){// оставил тело пустым }}

    Получается что после нажатия кнопки у меня запускается пустой цикл пока я держу эту кнопку. Само собой это глупое решение та как программа зависает пока я держу кнопку и выполняется цикл ничего, но если у вас на экране один фон и вы вводите например своё имя после прохождения для записи рекорда( так как было у меня ) то в принципе это не заметно даже если на фоне играет музыка (она к примеру не виснет ). Пока я не знаю другого решения пользуюсь этим.

     

    #714
    tyman
    tyman
    Участник
    Сообщений:23

    Зарегистрирован:
    04.03.2015

    Репутация:6

    MicroSDA, как ты BackSpace реализовал ?

    #715
    +2
    MicroSDA
    MicroSDA
    Участник
    Сообщений:64

    Зарегистрирован:
    24.04.2015

    Репутация:22

    //name -это std::string;
    if (Keyboard::isKeyPressed(Keyboard::BackSpace))
    {
    if (!name.empty())//если не пустая строка
    {
    name.erase(name.end() – 1);//в конец строки и минус 1 знак
    }

    }

Просмотр 9 сообщений - с 1 по 9 (из 9 всего)

Для ответа в этой теме необходимо авторизоваться.