魔兽世界 UI - 没有插件的自定义框架
World of Warcraft UI - custom frame without addon
在魔兽世界中,我创建了一个输出当前坐标的小坐标脚本:
local function ou(self,elapsed)
px,py=GetPlayerMapPosition("player")
DEFAULT_CHAT_FRAME:AddMessage(format("( %s ) [%f , %f]",GetZoneText(), px *100, py *100))
end
local f = CreateFrame("frame")
f:SetScript("OnUpdate", ou)
然而,这垃圾邮件默认聊天框架...
我将如何创建自定义框架以及如何访问它?
(我无法将自定义频道与 SendChatMessage
一起使用)
...我想在不制作插件的情况下执行此操作,谢谢 :)
我找到了一个解决方案,将框架存储在全局变量中,因为我不打算创建一个插件,整个程序需要几个宏(宏的最大字符数是255)。
第一个宏 - 准备稍后设置框架属性的函数
f
= 将被设置的输入帧
x
= 位置的 x 坐标
y
= 位置的y坐标
function setMyFrame(f,x,y)
f:SetSize(288,100)
f:SetPoint("TOPLEFT",UIParent,"TOPLEFT",x,y)
f.text = f.text or f:CreateFontString(nil,"ARTWORK","QuestFont_Shadow_Huge")
f.text:SetAllPoints(true)
end
第二个宏 - 准备将当前坐标设置为框架文本的坐标函数
ctotel
= 自上次更新帧以来经过的时间
creft
= 框架应该多久更新一次 - 最好是 0.1 - 每秒 10 次是性能友好的并且可以快速更新坐标
f
= 将更新的输入帧
i
= "how long it's been since the last update call cycle"(你不设置-它是从魔兽系统继承的)
ctotel = 0
creft = 0.1
function myCoords(f,i)
ctotel = ctotel + i
if ctotel >= creft then
px,py=GetPlayerMapPosition("player")
f.text:SetText(format("( %s ) [%f , %f]",GetZoneText(), px *100, py *100))
ctotel = 0
end
end
第三个宏 - 将框架存储在全局变量中并进行设置,然后 运行 使用 myCoords
作为回调
更新脚本
myCoordsFrame = CreateFrame("Frame","MyCoordsFrame",UIParent)
setMyFrame(myCoordsFrame, 500, 0)
myCoordsFrame:SetScript("OnUpdate", myCoords)
当然在游戏中所有宏都必须以 /运行 开头并且必须内联 - 没有换行符 - 而不是换行符只是 make space...
此外,您还必须 运行 这个 ^^^ 顺序中的宏(第一=>第二=>第三)
将 frame 和 creft 设置为全局变量的优点:
框架在世界上不能被摧毁(你必须重新登录才能摧毁它们)所以当它是全球的时候你可以稍后用
移动它
/run setMyFrame(myCoordsFrame, NEW_X_COORDINATE, NEW_Y_COORDINATE)
如果您希望坐标更新 slower/faster 您可以通过重置裂缝来实现 - 例如几乎每 0.05 甚至 0.01 秒实时刷新一次:
/run creft = 0.05
...甚至 /run creft = 0.01
使坐标可移动 - 可通过鼠标左键拖动(归功于 WoWhead 的 Wanderingfox):
myCoordsFrame:SetMovable(true)
myCoordsFrame:EnableMouse(true)
myCoordsFrame:SetScript("OnMouseDown",function() myCoordsFrame:StartMoving() end)
myCoordsFrame:SetScript("OnMouseUp",function() myCoordsFrame:StopMovingOrSizing() end)
...并作为复制粘贴游戏宏:
/run myCoordsFrame:SetMovable(true) myCoordsFrame:EnableMouse(true) myCoordsFrame:SetScript("OnMouseDown",function() myCoordsFrame:StartMoving() end) myCoordsFrame:SetScript("OnMouseUp",function() myCoordsFrame:StopMovingOrSizing() end)
在魔兽世界中,我创建了一个输出当前坐标的小坐标脚本:
local function ou(self,elapsed)
px,py=GetPlayerMapPosition("player")
DEFAULT_CHAT_FRAME:AddMessage(format("( %s ) [%f , %f]",GetZoneText(), px *100, py *100))
end
local f = CreateFrame("frame")
f:SetScript("OnUpdate", ou)
然而,这垃圾邮件默认聊天框架...
我将如何创建自定义框架以及如何访问它?
(我无法将自定义频道与 SendChatMessage
一起使用)
...我想在不制作插件的情况下执行此操作,谢谢 :)
我找到了一个解决方案,将框架存储在全局变量中,因为我不打算创建一个插件,整个程序需要几个宏(宏的最大字符数是255)。
第一个宏 - 准备稍后设置框架属性的函数
f
= 将被设置的输入帧
x
= 位置的 x 坐标
y
= 位置的y坐标
function setMyFrame(f,x,y)
f:SetSize(288,100)
f:SetPoint("TOPLEFT",UIParent,"TOPLEFT",x,y)
f.text = f.text or f:CreateFontString(nil,"ARTWORK","QuestFont_Shadow_Huge")
f.text:SetAllPoints(true)
end
第二个宏 - 准备将当前坐标设置为框架文本的坐标函数
ctotel
= 自上次更新帧以来经过的时间
creft
= 框架应该多久更新一次 - 最好是 0.1 - 每秒 10 次是性能友好的并且可以快速更新坐标
f
= 将更新的输入帧
i
= "how long it's been since the last update call cycle"(你不设置-它是从魔兽系统继承的)
ctotel = 0
creft = 0.1
function myCoords(f,i)
ctotel = ctotel + i
if ctotel >= creft then
px,py=GetPlayerMapPosition("player")
f.text:SetText(format("( %s ) [%f , %f]",GetZoneText(), px *100, py *100))
ctotel = 0
end
end
第三个宏 - 将框架存储在全局变量中并进行设置,然后 运行 使用 myCoords
作为回调
myCoordsFrame = CreateFrame("Frame","MyCoordsFrame",UIParent)
setMyFrame(myCoordsFrame, 500, 0)
myCoordsFrame:SetScript("OnUpdate", myCoords)
当然在游戏中所有宏都必须以 /运行 开头并且必须内联 - 没有换行符 - 而不是换行符只是 make space...
此外,您还必须 运行 这个 ^^^ 顺序中的宏(第一=>第二=>第三)
将 frame 和 creft 设置为全局变量的优点:
框架在世界上不能被摧毁(你必须重新登录才能摧毁它们)所以当它是全球的时候你可以稍后用
/run setMyFrame(myCoordsFrame, NEW_X_COORDINATE, NEW_Y_COORDINATE)
如果您希望坐标更新 slower/faster 您可以通过重置裂缝来实现 - 例如几乎每 0.05 甚至 0.01 秒实时刷新一次:
/run creft = 0.05
...甚至 /run creft = 0.01
使坐标可移动 - 可通过鼠标左键拖动(归功于 WoWhead 的 Wanderingfox):
myCoordsFrame:SetMovable(true)
myCoordsFrame:EnableMouse(true)
myCoordsFrame:SetScript("OnMouseDown",function() myCoordsFrame:StartMoving() end)
myCoordsFrame:SetScript("OnMouseUp",function() myCoordsFrame:StopMovingOrSizing() end)
...并作为复制粘贴游戏宏:
/run myCoordsFrame:SetMovable(true) myCoordsFrame:EnableMouse(true) myCoordsFrame:SetScript("OnMouseDown",function() myCoordsFrame:StartMoving() end) myCoordsFrame:SetScript("OnMouseUp",function() myCoordsFrame:StopMovingOrSizing() end)