Как сделать скрипт на таймер удерживания кнопки?

1 место в Готв 3 место Учитель Разработчик 3 место Готв Ветеран Писатель 2 место Тестер
Больше
5 года 11 мес. назад #117020 от Демий
Сейчас ковыряюсь в скриптах аси и что-то совсем завис в своих изысканиях на эту тему. Дело в том, что я хочу сделать проверку, удерживается ли кнопка в течении определённого времени. Алгоритм прост:
Кнопка зажата -> таймер пошёл, если кнопку отпустили, но таймер не дошёл до конца -> происходит одно, если же таймер дошёл -> другое.
Вот только проблема в том, что все варианты, что пришли мне в голову, срабатывают лишь на полное истечение таймера. :wall:

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Ветеран Поддержка Фонда Разработчик Проект месяца 3 место Учитель Оратор Даритель Стимкея 2 место За 2 место на конкурсе маппинга Программист Ruby Паладин
Больше
5 года 11 мес. назад #117022 от Dmy
Я бы попробовал переопределить update либо у сцены, либо у таймера (если используется стандартный таймер), и добавить туда проверку на нажатие клавиши.
Спасибо сказали: Демий

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

1 место в Готв 3 место Учитель Разработчик 3 место Готв Ветеран Писатель 2 место Тестер
Больше
5 года 11 мес. назад #117023 от Демий
И правда, чёт затупил. Уже сам дошёл до этого, но ты лишь укрепил мою уверенность в правильности решения. Получилось как-то так.
Code:
def chek if Input.press? (:R) @t += 1 else @t = 0 if @t != 0 end end

Метод chek вызывается через переопределённый update сцены, а @t создаётся в другом методе этого класса.
Пытался через переменную экземпляра, но она обновляется каждый раз, когда нажата кнопка.
Спасибо сказали: Lekste

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Программист Ruby Ветеран Даритель Стимкея Оратор Программист JavaScript
Больше
5 года 11 мес. назад #117025 от Lekste
Check пишется через ‘ck’. И проверка t != 0 лишняя.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

1 место в Готв 3 место Учитель Разработчик 3 место Готв Ветеран Писатель 2 место Тестер
Больше
5 года 11 мес. назад #117027 от Демий
Ну да, опечаточка.

А проверку на автомате прописал, чёт подумалось, что так оптимальней будет. Хотя всё одно будет прогоняться строка же.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Учитель
Больше
5 года 11 мес. назад - 5 года 11 мес. назад #117033 от 2Oth_Century_boi
Хз как на Ruby, вот как на C++ с SFML:
Code:
#include <SFML/Graphics.hpp> using namespace sf; int main() { Clock myClock; //создаём "часы" float timeKeyPress; //создаём переменную типа float, в ней будет храниться время зажатия кнопки while(Keyboard::isKeyPressed(Keyboard::Z) { //допустим, будем проверять клавишу "Z" timeKeyPress += myClock.getElapsedTime().asSeconds(); } if (timeKeyPress > 5) { *действие, которое произойдёт, если кнопку держали более 5 секунд*; timeKeyPress = 0; } else if (timeKeyPress != 0) { *действие, которое произойдёт, если кнопку держали менее 5 секунд*; timeKeyPress = 0; } return 0; }

У кода есть минус: когда зажмём кнопку "Z", то вся прога тупо виснет. Но любой прогер это легко изменит(хотя, иногда стопящаю прогу кнопка — полезная штука).
Последнее редактирование: 5 года 11 мес. назад пользователем 2Oth_Century_boi.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Время создания страницы: 0.111 секунд
Работает на Kunena форум