Добавлен , опубликован

Основы Интерфейса

Содержание:
пример как отслеживать нажатия/отпускания клавиш клавиатуры. разработчики игры дали такую возможность. тут есть события и нативки.

Blz​Trigger​Register​Player​Key​Event

новое событие можно создавать/регистрировать этой нативкой
native BlzTriggerRegisterPlayerKeyEvent takes trigger whichTrigger, player whichPlayer, oskeytype key, integer metaKey, boolean keyDown returns event
trigger whichTrigger - триггер
player whichPlayer - игрок
oskeytype key - клавиша клавиатуры. Все эти клавиши пронумерованы.
integer metaKey - мета-клавиша клавиатуры. Это системные клавиши, пример Shift, Alt, Ctrl, windows-key. Их всего 5. Это показывают взаимодействие metakey с key. Можете одновременно прожать Shift+A или Ctrl+ Shift + A. По факту metakey - просто число, измеряемое в битах.
boolean keyDown - переводится как "нажата кнопка". тут true/false. Этот аргумент подразумевает запускать ли событие при нажатии или при отпускании. При keyDown=true событие периодически выводит инфу, что кнопка зажата. Игрок может зажать, и долго не отпускать клавишу. Таким образом, событие может сработать множество раз. При keyDown=false событие отображает инфу, что кнопка отпущена.
объяснения metakey
0 - «none»
1 - «shift»
2 - «control»
4 - «alt»
8 - «META» (клавиша Windows)
Эти MetaKeys можно комбинировать, например, комбинируя control и alt: 2 + 4 = 6. Когда пользователь удерживает control и alt и нажимает oskey "A" (41), событие запускается только тогда, когда срабатывают значения metakey = 6 и oskey = 41.
Есть различные варианты взаимодействия metakey и oskey. Если удерживать все MetaKey, результат будет: 1+2+4+8 = 15
BlzGetTriggerPlayerIsKeyDown - это нативка проверяет нажата или отпущена кнопка. при срабатывании событии повторного нажатия эта нативка помогает вычислить, что до этого игрок удерживал какую то клавишу. При первом запуске ивента константа не покажет, что клавиша зажата. Просто когда вы долго удерживаете кнопку, у вас без конца срабатывает этот триггер. даже удерживая клавишу, дебаг бесконечно фиксирует удержание
BlzGetTriggerPlayerIsKeyDown takes nothing returns boolean
GetTriggerPlayer - игрок нажал/отпустил на кнопку
GetTriggerPlayer takes nothing returns player
BlzGetTriggerPlayerKey - клавиша.
BlzGetTriggerPlayerKey takes nothing returns oskeytype
BlzGetTriggerPlayerMetaKey - metakey или просто число
BlzGetTriggerPlayerMetaKey takes nothing returns integer
OSKEY_SHIFT, OSKEY_CONTROL, OSKEY_ALT не могут вызывать события, вместо этого используйте OSKEY_LSHIFT, OSKEY_LCONTROL, OSKEY_LALT, OSKEY_LMETA.
Числа внутри констант oskeytype, например $ 08, являются шестнадцатеричными числами.
константы
OSKEY_BACKSPACE = ConvertOsKeyType(0x08)	---@type oskeytype	
OSKEY_TAB = ConvertOsKeyType(0x09)	---@type oskeytype	
OSKEY_CLEAR = ConvertOsKeyType(0x0C)	---@type oskeytype	
OSKEY_RETURN = ConvertOsKeyType(0x0D)	---@type oskeytype	
OSKEY_SHIFT = ConvertOsKeyType(0x10)	---@type oskeytype	
OSKEY_CONTROL = ConvertOsKeyType(0x11)	---@type oskeytype	
OSKEY_ALT = ConvertOsKeyType(0x12)	---@type oskeytype	
OSKEY_PAUSE = ConvertOsKeyType(0x13)	---@type oskeytype	
OSKEY_CAPSLOCK = ConvertOsKeyType(0x14)	---@type oskeytype	
OSKEY_KANA = ConvertOsKeyType(0x15)	---@type oskeytype	
OSKEY_HANGUL = ConvertOsKeyType(0x15)	---@type oskeytype	
OSKEY_JUNJA = ConvertOsKeyType(0x17)	---@type oskeytype	
OSKEY_FINAL = ConvertOsKeyType(0x18)	---@type oskeytype	
OSKEY_HANJA = ConvertOsKeyType(0x19)	---@type oskeytype	
OSKEY_KANJI = ConvertOsKeyType(0x19)	---@type oskeytype	
OSKEY_ESCAPE = ConvertOsKeyType(0x1B)	---@type oskeytype	
OSKEY_CONVERT = ConvertOsKeyType(0x1C)	---@type oskeytype	
OSKEY_NONCONVERT = ConvertOsKeyType(0x1D)	---@type oskeytype	
OSKEY_ACCEPT = ConvertOsKeyType(0x1E)	---@type oskeytype	
OSKEY_MODECHANGE = ConvertOsKeyType(0x1F)	---@type oskeytype	
OSKEY_SPACE = ConvertOsKeyType(0x20)	---@type oskeytype	
OSKEY_PAGEUP = ConvertOsKeyType(0x21)	---@type oskeytype	
OSKEY_PAGEDOWN = ConvertOsKeyType(0x22)	---@type oskeytype	
OSKEY_END = ConvertOsKeyType(0x23)	---@type oskeytype	
OSKEY_HOME = ConvertOsKeyType(0x24)	---@type oskeytype	
OSKEY_LEFT = ConvertOsKeyType(0x25)	---@type oskeytype	
OSKEY_UP = ConvertOsKeyType(0x26)	---@type oskeytype	
OSKEY_RIGHT = ConvertOsKeyType(0x27)	---@type oskeytype	
OSKEY_DOWN = ConvertOsKeyType(0x28)	---@type oskeytype	
OSKEY_SELECT = ConvertOsKeyType(0x29)	---@type oskeytype	
OSKEY_PRINT = ConvertOsKeyType(0x2A)	---@type oskeytype	
OSKEY_EXECUTE = ConvertOsKeyType(0x2B)	---@type oskeytype	
OSKEY_PRINTSCREEN = ConvertOsKeyType(0x2C)	---@type oskeytype	
OSKEY_INSERT = ConvertOsKeyType(0x2D)	---@type oskeytype	
OSKEY_DELETE = ConvertOsKeyType(0x2E)	---@type oskeytype	
OSKEY_HELP = ConvertOsKeyType(0x2F)	---@type oskeytype	
OSKEY_0 = ConvertOsKeyType(0x30)	---@type oskeytype	
OSKEY_1 = ConvertOsKeyType(0x31)	---@type oskeytype	
OSKEY_2 = ConvertOsKeyType(0x32)	---@type oskeytype	
OSKEY_3 = ConvertOsKeyType(0x33)	---@type oskeytype	
OSKEY_4 = ConvertOsKeyType(0x34)	---@type oskeytype	
OSKEY_5 = ConvertOsKeyType(0x35)	---@type oskeytype	
OSKEY_6 = ConvertOsKeyType(0x36)	---@type oskeytype	
OSKEY_7 = ConvertOsKeyType(0x37)	---@type oskeytype	
OSKEY_8 = ConvertOsKeyType(0x38)	---@type oskeytype	
OSKEY_9 = ConvertOsKeyType(0x39)	---@type oskeytype	
OSKEY_A = ConvertOsKeyType(0x41)	---@type oskeytype	
OSKEY_B = ConvertOsKeyType(0x42)	---@type oskeytype	
OSKEY_C = ConvertOsKeyType(0x43)	---@type oskeytype	
OSKEY_D = ConvertOsKeyType(0x44)	---@type oskeytype	
OSKEY_E = ConvertOsKeyType(0x45)	---@type oskeytype	
OSKEY_F = ConvertOsKeyType(0x46)	---@type oskeytype	
OSKEY_G = ConvertOsKeyType(0x47)	---@type oskeytype	
OSKEY_H = ConvertOsKeyType(0x48)	---@type oskeytype	
OSKEY_I = ConvertOsKeyType(0x49)	---@type oskeytype	
OSKEY_J = ConvertOsKeyType(0x4A)	---@type oskeytype	
OSKEY_K = ConvertOsKeyType(0x4B)	---@type oskeytype	
OSKEY_L = ConvertOsKeyType(0x4C)	---@type oskeytype	
OSKEY_M = ConvertOsKeyType(0x4D)	---@type oskeytype	
OSKEY_N = ConvertOsKeyType(0x4E)	---@type oskeytype	
OSKEY_O = ConvertOsKeyType(0x4F)	---@type oskeytype	
OSKEY_P = ConvertOsKeyType(0x50)	---@type oskeytype	
OSKEY_Q = ConvertOsKeyType(0x51)	---@type oskeytype	
OSKEY_R = ConvertOsKeyType(0x52)	---@type oskeytype	
OSKEY_S = ConvertOsKeyType(0x53)	---@type oskeytype	
OSKEY_T = ConvertOsKeyType(0x54)	---@type oskeytype	
OSKEY_U = ConvertOsKeyType(0x55)	---@type oskeytype	
OSKEY_V = ConvertOsKeyType(0x56)	---@type oskeytype	
OSKEY_W = ConvertOsKeyType(0x57)	---@type oskeytype	
OSKEY_X = ConvertOsKeyType(0x58)	---@type oskeytype	
OSKEY_Y = ConvertOsKeyType(0x59)	---@type oskeytype	
OSKEY_Z = ConvertOsKeyType(0x5A)	---@type oskeytype	
OSKEY_LMETA = ConvertOsKeyType(0x5B)	---@type oskeytype	
OSKEY_RMETA = ConvertOsKeyType(0x5C)	---@type oskeytype	
OSKEY_APPS = ConvertOsKeyType(0x5D)	---@type oskeytype	
OSKEY_SLEEP = ConvertOsKeyType(0x5F)	---@type oskeytype	
OSKEY_NUMPAD0 = ConvertOsKeyType(0x60)	---@type oskeytype	
OSKEY_NUMPAD1 = ConvertOsKeyType(0x61)	---@type oskeytype	
OSKEY_NUMPAD2 = ConvertOsKeyType(0x62)	---@type oskeytype	
OSKEY_NUMPAD3 = ConvertOsKeyType(0x63)	---@type oskeytype	
OSKEY_NUMPAD4 = ConvertOsKeyType(0x64)	---@type oskeytype	
OSKEY_NUMPAD5 = ConvertOsKeyType(0x65)	---@type oskeytype	
OSKEY_NUMPAD6 = ConvertOsKeyType(0x66)	---@type oskeytype	
OSKEY_NUMPAD7 = ConvertOsKeyType(0x67)	---@type oskeytype	
OSKEY_NUMPAD8 = ConvertOsKeyType(0x68)	---@type oskeytype	
OSKEY_NUMPAD9 = ConvertOsKeyType(0x69)	---@type oskeytype	
OSKEY_MULTIPLY = ConvertOsKeyType(0x6A)	---@type oskeytype	
OSKEY_ADD = ConvertOsKeyType(0x6B)	---@type oskeytype	
OSKEY_SEPARATOR = ConvertOsKeyType(0x6C)	---@type oskeytype	
OSKEY_SUBTRACT = ConvertOsKeyType(0x6D)	---@type oskeytype	
OSKEY_DECIMAL = ConvertOsKeyType(0x6E)	---@type oskeytype	
OSKEY_DIVIDE = ConvertOsKeyType(0x6F)	---@type oskeytype	
OSKEY_F1 = ConvertOsKeyType(0x70)	---@type oskeytype	
OSKEY_F2 = ConvertOsKeyType(0x71)	---@type oskeytype	
OSKEY_F3 = ConvertOsKeyType(0x72)	---@type oskeytype	
OSKEY_F4 = ConvertOsKeyType(0x73)	---@type oskeytype	
OSKEY_F5 = ConvertOsKeyType(0x74)	---@type oskeytype	
OSKEY_F6 = ConvertOsKeyType(0x75)	---@type oskeytype	
OSKEY_F7 = ConvertOsKeyType(0x76)	---@type oskeytype	
OSKEY_F8 = ConvertOsKeyType(0x77)	---@type oskeytype	
OSKEY_F9 = ConvertOsKeyType(0x78)	---@type oskeytype	
OSKEY_F10 = ConvertOsKeyType(0x79)	---@type oskeytype	
OSKEY_F11 = ConvertOsKeyType(0x7A)	---@type oskeytype	
OSKEY_F12 = ConvertOsKeyType(0x7B)	---@type oskeytype	
OSKEY_F13 = ConvertOsKeyType(0x7C)	---@type oskeytype	
OSKEY_F14 = ConvertOsKeyType(0x7D)	---@type oskeytype	
OSKEY_F15 = ConvertOsKeyType(0x7E)	---@type oskeytype	
OSKEY_F16 = ConvertOsKeyType(0x7F)	---@type oskeytype	
OSKEY_F17 = ConvertOsKeyType(0x80)	---@type oskeytype	
OSKEY_F18 = ConvertOsKeyType(0x81)	---@type oskeytype	
OSKEY_F19 = ConvertOsKeyType(0x82)	---@type oskeytype	
OSKEY_F20 = ConvertOsKeyType(0x83)	---@type oskeytype	
OSKEY_F21 = ConvertOsKeyType(0x84)	---@type oskeytype	
OSKEY_F22 = ConvertOsKeyType(0x85)	---@type oskeytype	
OSKEY_F23 = ConvertOsKeyType(0x86)	---@type oskeytype	
OSKEY_F24 = ConvertOsKeyType(0x87)	---@type oskeytype	
OSKEY_NUMLOCK = ConvertOsKeyType(0x90)	---@type oskeytype	
OSKEY_SCROLLLOCK = ConvertOsKeyType(0x91)	---@type oskeytype	
OSKEY_OEM_NEC_EQUAL = ConvertOsKeyType(0x92)	---@type oskeytype	
OSKEY_OEM_FJ_JISHO = ConvertOsKeyType(0x92)	---@type oskeytype	
OSKEY_OEM_FJ_MASSHOU = ConvertOsKeyType(0x93)	---@type oskeytype	
OSKEY_OEM_FJ_TOUROKU = ConvertOsKeyType(0x94)	---@type oskeytype	
OSKEY_OEM_FJ_LOYA = ConvertOsKeyType(0x95)	---@type oskeytype	
OSKEY_OEM_FJ_ROYA = ConvertOsKeyType(0x96)	---@type oskeytype	
OSKEY_LSHIFT = ConvertOsKeyType(0xA0)	---@type oskeytype	
OSKEY_RSHIFT = ConvertOsKeyType(0xA1)	---@type oskeytype	
OSKEY_LCONTROL = ConvertOsKeyType(0xA2)	---@type oskeytype	
OSKEY_RCONTROL = ConvertOsKeyType(0xA3)	---@type oskeytype	
OSKEY_LALT = ConvertOsKeyType(0xA4)	---@type oskeytype	
OSKEY_RALT = ConvertOsKeyType(0xA5)	---@type oskeytype	
OSKEY_BROWSER_BACK = ConvertOsKeyType(0xA6)	---@type oskeytype	
OSKEY_BROWSER_FORWARD = ConvertOsKeyType(0xA7)	---@type oskeytype	
OSKEY_BROWSER_REFRESH = ConvertOsKeyType(0xA8)	---@type oskeytype	
OSKEY_BROWSER_STOP = ConvertOsKeyType(0xA9)	---@type oskeytype	
OSKEY_BROWSER_SEARCH = ConvertOsKeyType(0xAA)	---@type oskeytype	
OSKEY_BROWSER_FAVORITES = ConvertOsKeyType(0xAB)	---@type oskeytype	
OSKEY_BROWSER_HOME = ConvertOsKeyType(0xAC)	---@type oskeytype	
OSKEY_VOLUME_MUTE = ConvertOsKeyType(0xAD)	---@type oskeytype	
OSKEY_VOLUME_DOWN = ConvertOsKeyType(0xAE)	---@type oskeytype	
OSKEY_VOLUME_UP = ConvertOsKeyType(0xAF)	---@type oskeytype	
OSKEY_MEDIA_NEXT_TRACK = ConvertOsKeyType(0xB0)	---@type oskeytype	
OSKEY_MEDIA_PREV_TRACK = ConvertOsKeyType(0xB1)	---@type oskeytype	
OSKEY_MEDIA_STOP = ConvertOsKeyType(0xB2)	---@type oskeytype	
OSKEY_MEDIA_PLAY_PAUSE = ConvertOsKeyType(0xB3)	---@type oskeytype	
OSKEY_LAUNCH_MAIL = ConvertOsKeyType(0xB4)	---@type oskeytype	
OSKEY_LAUNCH_MEDIA_SELECT = ConvertOsKeyType(0xB5)	---@type oskeytype	
OSKEY_LAUNCH_APP1 = ConvertOsKeyType(0xB6)	---@type oskeytype	
OSKEY_LAUNCH_APP2 = ConvertOsKeyType(0xB7)	---@type oskeytype	
OSKEY_OEM_1 = ConvertOsKeyType(0xBA)	---@type oskeytype	
OSKEY_OEM_PLUS = ConvertOsKeyType(0xBB)	---@type oskeytype	
OSKEY_OEM_COMMA = ConvertOsKeyType(0xBC)	---@type oskeytype	
OSKEY_OEM_MINUS = ConvertOsKeyType(0xBD)	---@type oskeytype	
OSKEY_OEM_PERIOD = ConvertOsKeyType(0xBE)	---@type oskeytype	
OSKEY_OEM_2 = ConvertOsKeyType(0xBF)	---@type oskeytype	
OSKEY_OEM_3 = ConvertOsKeyType(0xC0)	---@type oskeytype	
OSKEY_OEM_4 = ConvertOsKeyType(0xDB)	---@type oskeytype	
OSKEY_OEM_5 = ConvertOsKeyType(0xDC)	---@type oskeytype	
OSKEY_OEM_6 = ConvertOsKeyType(0xDD)	---@type oskeytype	
OSKEY_OEM_7 = ConvertOsKeyType(0xDE)	---@type oskeytype	
OSKEY_OEM_8 = ConvertOsKeyType(0xDF)	---@type oskeytype	
OSKEY_OEM_AX = ConvertOsKeyType(0xE1)	---@type oskeytype	
OSKEY_OEM_102 = ConvertOsKeyType(0xE2)	---@type oskeytype	
OSKEY_ICO_HELP = ConvertOsKeyType(0xE3)	---@type oskeytype	
OSKEY_ICO_00 = ConvertOsKeyType(0xE4)	---@type oskeytype	
OSKEY_PROCESSKEY = ConvertOsKeyType(0xE5)	---@type oskeytype	
OSKEY_ICO_CLEAR = ConvertOsKeyType(0xE6)	---@type oskeytype	
OSKEY_PACKET = ConvertOsKeyType(0xE7)	---@type oskeytype	
OSKEY_OEM_RESET = ConvertOsKeyType(0xE9)	---@type oskeytype	
OSKEY_OEM_JUMP = ConvertOsKeyType(0xEA)	---@type oskeytype	
OSKEY_OEM_PA1 = ConvertOsKeyType(0xEB)	---@type oskeytype	
OSKEY_OEM_PA2 = ConvertOsKeyType(0xEC)	---@type oskeytype	
OSKEY_OEM_PA3 = ConvertOsKeyType(0xED)	---@type oskeytype	
OSKEY_OEM_WSCTRL = ConvertOsKeyType(0xEE)	---@type oskeytype	
OSKEY_OEM_CUSEL = ConvertOsKeyType(0xEF)	---@type oskeytype	
OSKEY_OEM_ATTN = ConvertOsKeyType(0xF0)	---@type oskeytype	
OSKEY_OEM_FINISH = ConvertOsKeyType(0xF1)	---@type oskeytype	
OSKEY_OEM_COPY = ConvertOsKeyType(0xF2)	---@type oskeytype	
OSKEY_OEM_AUTO = ConvertOsKeyType(0xF3)	---@type oskeytype	
OSKEY_OEM_ENLW = ConvertOsKeyType(0xF4)	---@type oskeytype	
OSKEY_OEM_BACKTAB = ConvertOsKeyType(0xF5)	---@type oskeytype	
OSKEY_ATTN = ConvertOsKeyType(0xF6)	---@type oskeytype	
OSKEY_CRSEL = ConvertOsKeyType(0xF7)	---@type oskeytype	
OSKEY_EXSEL = ConvertOsKeyType(0xF8)	---@type oskeytype	
OSKEY_EREOF = ConvertOsKeyType(0xF9)	---@type oskeytype	
OSKEY_PLAY = ConvertOsKeyType(0xFA)	---@type oskeytype	
OSKEY_ZOOM = ConvertOsKeyType(0xFB)	---@type oskeytype	
OSKEY_NONAME = ConvertOsKeyType(0xFC)	---@type oskeytype	
OSKEY_PA1 = ConvertOsKeyType(0xFD)	---@type oskeytype	
OSKEY_OEM_CLEAR = ConvertOsKeyType(0xFE)	---@type oskeytype	
код
--================== ПРОВЕРЯЕМ НАЖАТИЕ КЛАВИШ КЛАВИАТУРЫ ==========
    
    --https://www.hiveworkshop.com/threads/oskey-player-key-event.319903/
    local ShiftOn = 0
    --таймером задаем задержку, тк игра может вылетать во время загрузки
    --это происходит из-за того, что игроки жмут на клавиши во время загрузки
    TimerStart(CreateTimer(),0,false, function()
        print("Create Keys")
        local is_button_pressed = {}
        
        --перебираем кнопки с 8-255
        -- для каждой такой кнопки создаем триггер
        --и регистрируем события нажатия и отпускания клавиш
        for index = 8,255 do
            --триггер нажатия клавиш
            local keypress_trigger = CreateTrigger()
            --триггер отпускания клавиши
            local key_release_trigger = CreateTrigger()
            
            is_button_pressed[index]=false
            
-- >>>>>>>>>>>>>>>>>ловим нажатие клавиши <<<<<<<<<<<<<<<<<<<<<<
            TriggerAddAction(keypress_trigger, function()
                
                --условие: если клавиша удерживается игроком
                --фиксирует, что до этого игрок удерживал какую то клавишу.
                --просто даже удерживая клавишу, дебаг бесконечно фиксирует удержание
                --if BlzGetTriggerPlayerIsKeyDown() then
                    --print("кнопка удерживается-1")
                    --это может пригодится в каких-нибудь управлениях, например в гонках.
                    --отпускание можно отследить в след триггере.
                --end
                
                --если клавиша не удерживается игроком, значит, это первое нажатие
                --если нужно просто зафиксировать первое нажатие.
                --при удержании бесконечно сыпаются строки, раздражает, достаточно один раз зафиксировать и все.
                --пример клавиша "стоп!" при нажатии на S, у вас останавливается юнит.
                --а если зажать случайно, он у вас вообще остановится
                if not is_button_pressed[index] then
                    is_button_pressed[index]=true
                    --print("нажата кнопка")    
                end
                                
                --print("Down OsKey:",index, "meta",BlzGetTriggerPlayerMetaKey())
            end)
            
-- <<<<<<<<<<<<<<<<<<< ловим отпускание клавиши >>>>>>>>>>>>>>>>>>>
            TriggerAddAction(key_release_trigger, function()
                
                --условие очень хорошо фиксирует, что игрок перестал удерживать клавишу
                --это удобно в каких-нибудь играх с управлением на клавишах
                --if not BlzGetTriggerPlayerIsKeyDown() then
                    --print("кнопка не удерживается-2")
                --end    
                
                --теперь нужно нажатие отпустить
                if is_button_pressed[index] then
                    is_button_pressed[index]=false
                    --print("отпущена кнопка")
                end
                   
   
                   
                --print("UP OsKey:",index, "meta",BlzGetTriggerPlayerMetaKey())
            end)
-- ^^^^^^^^^^^^^ регистрируем ^^^^^^^^^^^^^^^^
           --для игрока создаем 16 видов metakey-взаимодействии с кнопкой key
            local key = ConvertOsKeyType(index)
            for metaKey = 0,15,1 do
                BlzTriggerRegisterPlayerKeyEvent(keypress_trigger, Player(0), key, metaKey, true)
                BlzTriggerRegisterPlayerKeyEvent(key_release_trigger, Player(0), key, metaKey, false)
            end

        end
                        
        print("Done")
        print("Press Keys to show the index of that oskey and its metakey")
        
        DestroyTimer(GetExpiredTimer())
    end)

Баги с клавиатурой

У кнопок клавиатуры есть баги, когда жмешь на кнопку, и система думает, что кнопка зажата. Когда отпускаешь, кнопка отпущена. Механика ясна.
Но бывает ситуации, когда сбивается фокус, и событие клавы не реагирует на нажатие кнопки клавы. Например, это происходит при нажатии лкм (сбивается фокус, только повторное нажатие лкм отлипает), нажатие на фрейм (фокус смещается на фрейм, клава уже не реагирует).
🔴Причина: В таком случае, система думает, что кнопка не отпущена.
🟢Решение: надо сделать так, чтобы клавиша была отпущена
⏩️Нажатие на фрейм⏪️ есть решения, об этом рассказывал ранее
Решение
⏭️Нажатие лкм⏮️ есть тоже решения
Решение
Совет к решению ничего нового не даем, но подумать. Пришел к выводу, что можно обузить триггер down, вместо таймера. Хотя, иногда удержание клавы мешает, поскольку срабатывает периодически. И на этом все.

Содержание
`
ОЖИДАНИЕ РЕКЛАМЫ...