没有插件的自定义界面-魔兽世界界面

在《魔兽世界》中,我创建了一个小坐标脚本,用于输出当前坐标:

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 的自定义频道)

...我想在不制作插件的情况下实现这一点,谢谢 :)

点赞
用户1835470
用户1835470

我在使用全局变量存储框体方案中找到了解决方案。因为我不打算创建插件,整个程序只需要一些宏(宏的最大字符数为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 = "上次更新呼叫周期以来的时间长度"(您不需要设置它 - 它从WoW系统继承)

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)

当然在游戏中,所有宏必须以/run开头,并且必须内联 - 没有换行符 - 换行符只需空格即可...

此外,您必须以此顺序运行宏(第一个=>第二个=>第三个)

全局设置框架和creft的优点:

框架无法在世界中被摧毁(您必须重新登录才能摧毁它们),因此当它是全局的时,您以后可以将它移动到

/run setMyFrame(myCoordsFrame, NEW_X_COORDINATE, NEW_Y_COORDINATE)

如果您希望坐标更新速度变慢/更快,可以通过重置creft来实现 - 例如,几乎实时刷新每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)
2015-09-01 17:16:13