Как закрыть Ace GUI 3.0 Frame при нажатии escape? - PullRequest
1 голос
/ 14 апреля 2020

Я использую библиотеку WowAce Ace3 Ace GUI для дополнения World of Warcraft. Я хотел бы, чтобы моя рамка была закрыта при нажатии клавиши escape, как это обычно делается в игре.

Вот как создается рамка:

    local frame = AceGUI:Create("Frame")
    frame:SetTitle("Flare")
    frame:SetStatusText("Ready")
    frame:SetCallback("OnClose", function(widget) AceGUI:Release(widget) end)
    frame:SetLayout("List")

1 Ответ

2 голосов
/ 14 апреля 2020

Как часть World of Warcraft API, таблица UISpecialFrames предоставляется как глобальная переменная, и любая строка в этой таблице будет выбираться как клавиша из таблицы глобальных переменных при нажатии клавиши escape; Если эта глобальная переменная является открытым фреймом WoW, он будет закрыт.

Это означает, что вам придется объявить ваш фрейм WoW как глобальную переменную и добавить имя переменной в таблицу UISpecialFrames с помощью * 1005. *. Обратите внимание, что рамка WoW рамки Ace GUI хранится под ключом frame. Соберите в коде:

    local frame = AceGUI:Create("Frame")
    frame:SetTitle("Flare")
    frame:SetStatusText("Ready")
    frame:SetCallback("OnClose", function(widget) AceGUI:Release(widget) end)
    frame:SetLayout("List")

    -- Add the frame as a global variable under the name `MyGlobalFrameName`
    _G["MyGlobalFrameName"] = frame.frame
    -- Register the global variable `MyGlobalFrameName` as a "special frame"
    -- so that it is closed when the escape key is pressed.
    tinsert(UISpecialFrames, "MyGlobalFrameName")
...