WoW Addon - 按下按键时的动态工具提示
我有一个工具提示,如果按住SHIFT键,我希望它显示更详细的信息。下面的代码到目前为止工作:WoW Addon - 按下按键时的动态工具提示
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键时才起作用。只要鼠标光标保留在myAddonFrame上,即使在释放SHIFT之后,它也会显示详细信息。但我希望它动态!
我的问题在这里:
我怎样才能让根据SHIFT键,当鼠标光标停留在框架上的提示来刷新自己?
我想到的是,当我将鼠标悬停在魔兽世界中的某个物品上时,只要按住SHIFT键,该物品就会与我目前佩戴的物品进行比较。我只是想在同一个工具提示中想到这个效果。
我希望有人能把我推向正确的方向。我试过使用MODIFIER_STATE_CHANGED,但我没有得到它的工作。
哦,虽然我们正在谈论toolips ......这里有一个加分题:
是否有可能将其格式化位?粗体,斜体,字体大小,换行中单个单词的颜色变化等?我没有发现什么特别的here (wowprogramming.com),但也许我忽略了它。
---解决---
为有兴趣在溶液中的:
我用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键时,只需重新填充工具提示,并且您的功能可以对键的新状态作出反应。
餐巾代码,斜杠一些副本&粘贴从我使用这种方法的插件,所以它可能不完美,但足以传达的概念。
虽然给MODIFIER_STATE_CHANGED一个尝试,我总是使用相同的框架(实际上,这个插件现在只包含一个单一的框架)。这可能一直是这个问题。我今晚会试一试,告诉你我的结果。现在感谢! :) – nehegeb
那真的有帮助!我在上面的问题中整合了最终解决方案。再次感谢! – nehegeb