LINUX.ORG.RU

Для начала жи-ши.

как работает в играх время зажатия клавишы?

Я бы сделал два ивента — нажатие и отжатие. А потом от таймстампа (внутреннего) отжатия отнял таймстамп нажатия. Только не представляю зачем может пригодиться получать именно продолжительность нажатия.

А как сделано в разных играх на разных движках — это надо спрашивать у разработчиков этих движков.

mord0d ★★★★★
()

Как в линуксе посмотреть время, которое я нажимаю кнопку.

В xev есть таймстампы и отметки о том, какое событие произошло (нажал или отпустил кнопку), ну и всякая еще информация на эту тему.

micronekodesu ★★★
()

А все я понял key_down и key_up эвенты.

steemandlinux ★★★★★
() автор топика
Ответ на: комментарий от micronekodesu

какие-то странные штампы времени, это минус какая степень?

PS: А это тысячные секунды. Не знал что кнопки клавиатуры так долго удерживаются.

steemandlinux ★★★★★
() автор топика
Последнее исправление: steemandlinux (всего исправлений: 2)
Ответ на: комментарий от micronekodesu

Это в иксах, а вопрос про линукс =)

Так что правильным ответом формально будет struct input_event { struct timeval time; ...

t184256 ★★★★★
()
Ответ на: комментарий от micronekodesu

Работающий вариант sudo evtest? Любого считывания событий ввода в linux? Нет, не слабо:

https://gist.github.com/t184256/3234302966f64a0c9095c663cdc616cb

https://gist.github.com/t184256/f4994037a2a204774ef3b9a2b38736dc

https://gist.github.com/t184256/f6eae48b1a9eb584f2498191ebc0a260

https://github.com/t184256/keyboard-remap

https://github.com/t184256/irwir

t184256 ★★★★★
()
Ответ на: комментарий от micronekodesu

https://www.linuxjournal.com/article/6429

Вот чуть допиленное sudo app num сколько эвентов показать, если не задавать число то бесконечно.

#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <linux/input.h>

int main(int argc, char *argv[])
{
    size_t rb;
    int fd = 0;
    int inf = 0;
    int num = 0;
    struct input_event ev[64];

    if(argc == 1)
    {
        inf = 1;
    }else{
        num = atoi(argv[1]);
    }
    if(num <= 0){ num=0; }

    for (int i = 0; i < num || inf; ++i)
    {
        rb=read(fd = open("/dev/input/event0",0),ev,sizeof(struct input_event)*64);

        if (rb < (int) sizeof(struct input_event))
        {
            perror("evtest: short read");
            exit (1);
        }

        for (int yalv = 0; yalv < (int) (rb / sizeof(struct input_event)); yalv++)
        {
            if (EV_KEY == ev[yalv].type)
            {
               printf("[%ld.%06ld]",ev[yalv].time.tv_sec,ev[yalv].time.tv_usec);
               printf(" | type %d | code %d | value %d | \n",ev[yalv].type,ev[yalv].code, ev[yalv].value);
            }
        }
        close(fd);
}
    return 0;
}

dron@gnu:~/Рабочий-Стол$ gcc-9 main.c ;sudo ./a.out 6
[1595541942.264725] | type 1 | code 16 | value 1 | 
[1595541942.352054] | type 1 | code 17 | value 1 | 
[1595541942.451097] | type 1 | code 16 | value 0 | 
[1595541942.476870] | type 1 | code 18 | value 1 | 
[1595541942.557378] | type 1 | code 17 | value 0 | 
[1595541942.645395] | type 1 | code 18 | value 0 | 
dron@gnu:~/Рабочий-Стол$

Пригодится комунить

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 3)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.