WoW插件-按下键时的动态工具提示



我有一个工具提示,我希望它显示更详细的信息,如果按下/按住SHIFT键。到目前为止,下面的代码可以正常工作:

function myAddonFrame_OnEnter(self)
    myAddon_GenerateTooltip(self)
end
function myAddonFrame_OnLeave(self)
    GameTooltip:Hide()
end
function myAddon_GenerateTooltip(self)
    GameTooltip:SetOwner(self or UIParent, "ANCHOR_LEFT")
    GameTooltip:SetText(“myAddon”, 0.7, 0, 1)
    GameTooltip:AddLine(" ", 1, 1, 1)
    if IsShiftKeyDown() then
        -- Show some more details, if the SHIFT key is pressed.
        GameTooltip:AddLine(“Some detailed stuff about god and the world.”, 1, 1, 1)
        GameTooltip:AddLine(“Even more great stuff to read.”, 0.9, 0.8, 0.1, 1)
    else
        -- Basic information to be displayed when no button is pressed.
        GameTooltip:AddLine(“Some basic information. Yaaay!“, 1, 1, 1)
        GameTooltip:AddLine(" ", 1, 1, 1)
        GameTooltip:AddLine(“Hold SHIFT for more information…”, 0.5, 0.5, 0.5)
    end
    GameTooltip:Show()
end

但这只适用于在鼠标悬停在myAddonFrame上之前按住SHIFT键。即使在释放SHIFT之后,只要鼠标光标停留在myAddonFrame上,它也会显示详细信息。但我希望它是动态的!

我的问题是:
当鼠标光标停留在框架上时,如何使工具提示根据SHIFT键自行刷新?
我的想法是,当我在《魔兽世界》中将鼠标悬停在一件物品上时,只要我按住SHIFT键,该物品就会与我目前的穿着进行比较。我想要完全相同的效果,只是在相同的工具提示。

我希望有人能把我推向正确的方向。我已经尝试使用MODIFIER_STATE_CHANGED,但我没有得到它的工作。

哦,当我们谈论工具的时候…这里有一个额外的问题:
能不能稍微调整一下格式?粗体、斜体、字体大小、一行中单个单词的颜色变化等?我没有发现任何特别的东西在这里(wowprogramming.com),但也许我忽略了它。

—SOLVED—
对解决方案感兴趣的人:

我使用了Nathanyel的代码片段并对其进行了一些调整。因为我为所有框架使用一个XML文件,为函数使用一个相应的LUA文件,所以我不想在那里创建一个新框架。但是我找到了一种方法,可以使用现有的myAddonFrame作为动态工具提示。
我的代码从上面的工作完美,我只需要添加以下内容:

-- [ALL THE CODE ABOVE!]
function myAddonFrame_OnLoad(frame)
    frame:RegisterEvent("MODIFIER_STATE_CHANGED")   -- Needed for the dynamic tool tip.
end
function myAddonFrame_OnEvent(frame, event, ...)
    -- Fired, when any keyboard key is pressed.
    local key, state = select(1, ...)
    if (event == "MODIFIER_STATE_CHANGED") then
        -- Switch the dynamic tooltip when the SHIFT key is held.
        if myAddonFrame:IsMouseOver() and ((key == "LSHIFT") or (key == "RSHIFT")) then
            myAddon_GenerateTooltip(frame)
        end
    end
end

就是这样!感谢Nathanyel的思想食粮。:)

该事件确实是关键,但由于您需要将其注册到一个框架,最好是受代码影响的框架,因此您应该为工具提示使用一个新框架:

local myFrame = CreateFrame("GameTooltip","myFrame",UIParent,"GameTooltipTemplate")
myFrame:SetScript("OnEvent",function(self, event, arg, ...)
  if myFrame:IsShown()
  and event == "MODIFIER_STATE_CHANGED"
  and (arg = "LSHIFT" or arg = "RSHIFT") then
    myAddon_GenerateTooltip() -- might need a parameter
  end
end
myFrame:RegisterEvent("MODIFIER_STATE_CHANGED")

这只是在按下Shift键时重新填充工具提示,您的函数可以对键的新状态做出反应。
餐巾纸代码,斜线一些复制& &;粘贴从我使用这种方法的插件,所以它可能不是完美的,但足以传达的概念。

相关内容

  • 没有找到相关文章

最新更新