这篇呢,原载在NGA上。当然这不是转载,真的是原创……本来只是对LitePanels的layout_example.lua的一个无脑的翻译,仍然有很多玩家在帖子中提出了不少问题,倒是让我感觉很惭愧……因为其实我没怎么用过LP,只是读了读代码而已。嗯。

把文章从NGA重新贴在这个地方也为将来自己组合提供一个技术参考的文档。oUF+LitePanels+rAB什么的,确实是相当精简小巧又灵活多变。

那么正文就开始吧,LitePanels的layout_example.lua无脑翻译。

–[[
LitePanels 1.5

没有图形配置界面,这个文件包含了你的面板配置。
把这个文件拷贝一份改名为layout.lua来开始你的工作。请使用UTF-8编码保存。

语法和配置的例子将在文档末尾给出。大多数默认值可以在core.lua的开头找到。

通常情况下,除了数字、true/false或者{列表}值之外的值,都需要加引号。
比如父框架名,层,锚点,渐变方向,或者颜色的”r g b”字串等。

如果你不理解下面的某个属性值,参考wowwiki的链接。

=== 框架属性 ===

属性 [默认值] http://参考链接
描述。

name [根据建立顺序产生的数字]
为你的面板定义一个名称是非常有用的,当你想要书写脚本或者把它作为一个父框架的时候。
未命名的面板将会根据它在配置文件中列出的顺序给定一个数字代码。如果你想调用一个面板
的名字,你需要加上前缀’LP_’。比如:LP_GreenFrame 或者 LP_1

parent [“UIParent”]
标明你想将面板定位到的框架。面板将会继承parent属性指明的框架
的大小和可见性(不是透明度)。

anchor_frame [parent]
设定面板的锚点框架。如果你既想保持父框架的可见性、大小、透明度等属性,又想将面板以
另一个框架为基准定位的话需要使用这个属性。默认和parent指定的父框架相同。

anchor_to [“BOTTOMLEFT”] http://www.wowwiki.com/Widget_Anchor_Points
锚定点在父框架的哪一侧(位置)。可选值参考wowwiki的相关内容。

anchor_from [anchor_to 的值或者 “BOTTOMLEFT”] http://www.wowwiki.com/Widget_Anchor_Points
标明面板的哪一侧定位到上面标明的锚定框架的位置。

require
只有当某个插件被加载的时候才显示该面板。比如:{require=”Dominos”}, 表示只有当Dominos
动作条被加载的时候才显示该面板。
这个属性也适用于“需要时加载”的插件。

x_off [0] http://www.wowwiki.com/API_Region_SetPoint
沿X轴移动的像素数(我需不需要多嘴说一句X轴是横向……)。负数向左,正数向右。

y_off [0] http://www.wowwiki.com/API_Region_SetPoint
沿Y轴移动的像素数。负数向下,正数向上。

strata [“BACKGROUND”] http://www.wowwiki.com/UITYPE_FrameStrata
面板所在的UI层。可选值见wowwiki。

level [1] http://www.wowwiki.com/FrameLevel
这是层内的一个z坐标层。如果一个层内有两个面板,该属性值高的一个将显示在另一个的
上方。如果设为0则表示显示在父框架的后面。

width [0] http://www.wowwiki.com/API_Region_SetWidth
面板的宽度,用像素或者百分比表示。比如:{width=110,}或者{width=”100%”,}
如果设定了anchor_frame属性,百分比的属性值使用该框架的宽度而不是父框架的。

height [0] http://www.wowwiki.com/API_Region_SetHeight
面板的高度,用像素或百分比表示。比如:{height=50,} 或者 {height=”60%”,}
如果设定了anchor_frame属性,百分比的属性值使用该框架的高度而不是父框架的。

bg_color [“0 0 0”] http://www.wowwiki.com/API_Texture_SetTexture
面板的背景颜色值,可设定为”r g b”的RGB值或者用”CLASS”表示职业颜色。
数值必须在0到1之间,0和1之间的数值必须用10进制小数表示。
比如:bg_color = “0 0.4 0.85”,

如果你需要在脚本中调用背景对象,它的名字是LP_name.bg。(name是面板的名字)
如果存在背景图像,这个值会是图像的顶点颜色。

bg_alpha [1.0] http://www.wowwiki.com/API_UIObject_SetAlpha
背景颜色或材质的透明度,用0-1之间的十进制小数表示,
0是完全透明,1是完全不透明。

inset [0或者border_size属性的1/4]
背景收缩的像素数。如果是负的,就扩展背景,做出衬着的效果。如果设定了边缘,会自动调整自身的值。
PS:就是说,如果设定了这个值,背景和面板边缘之间就会空出相应像素数的距离,而不是刚好填充满。
例1:inset = -5 – (等同于inset={top=-5,bottom=-5,left=-5,right=-5})
例2:inset = {top=5,bottom=5} – (等同于inset={top=5,bottom=5,left=0,right=0})

border [false] http://www.wowwiki.com/API_Frame_SetBackdrop
该属性值定义边框材质文件的路径。如果设定为true,使用默认的材质路径
(”Interface/Tooltips/UI-Tooltip-Border”),或者设定为一个不同的路径。
例1:border = true – 使用默认的边框材质
例2:border = “texture” – 如果texture.tga文件存在于’LitePanel/media/‘文件夹下
例3:border = “Interface\AddOns\SharedMedia\border\roth” –如果文件在别的地方
例4:border = “SOLID” – 做出一个纯色的边框,像素尺寸由border_size定义

border_size [16] http://www.wowwiki.com/API_Frame_SetBackdrop
边框文件的像素大小,即边框厚度和边角的大小。(很显然和材质文件中各分片的大小有关)

border_color [“1 1 1”] http://www.wowwiki.com/API_SetBackdropBorderColor
设定边框的颜色,使用”红 绿 蓝”的属性值,也可以用”CLASS”代表职业颜色。
例1:border_color = “0.5 0.1 1.0”
例2:border_color = “CLASS”

border_alpha [1.0] http://www.wowwiki.com/API_SetBackdropBorderColor
边框颜色的透明度。1.0是完全可见,0.0是完全透明。

gradient
背景的渐变方向。”H”表示水平,”V”表示垂直。
例1:gradient = “H”
例2:gradient = “HORIZONTAL” – 两者效果相同

gradient_color [“1 1 1”]
渐变的颜色。第一色使用bg_color,这里定义的是第二色。参见:bg_color。

gradient_alpha [1.0 或者 bg_alpha] http://www.wowwiki.com/API_UIObject_SetAlpha
渐变背景颜色的透明度。这个值和bg_alpha是分离的。参见:bg_alpha。

bg_blend http://www.wowwiki.com/AlphaMode
透明度混合方式,参见wowwiki的相关文档。

PS:以上gradient开始的一系列属性用于定义渐变背景,如果用过PS或Flash之
类的软件,应该明白渐变色的意思。

tex_file [“Interface\AddOns\LitePanels\media*tex_file*“]
你想使用的材质的文件名。图像的宽和高必须是2的n次幂!(8,16,32,64,128等等)
如果你将文件放到了插件文件夹下的media文件夹里,你可以直接指明文件名,否则要
给出完整的路径。

tex_coord http://www.wowwiki.com/API_Texture_SetTexCoord
高级属性,参见wowwiki的相关文档。
例:{left,right,top,bottom} 或者 {ULx,ULy,LLx,LLy,URx,URy,LRx,LRy}

tex_rotate [0]
如果想旋转材质的话,这里给出转动的角度。(0-360)

flip_h 以及 flip_v [false]
如果 flip_h 或者 flip_v 设定为 true,材质将会水平或垂直进行翻转,
h是水平,v是垂直。例:{flip_v=true,},

mouse [false]
设为true时,拦截框架上的鼠标点击,不存在点击穿透。
如果在脚本中使用了以下几个事件,该属性值将自动设置为true:OnClick, OnMouseDown,
OnMouseUp, OnDoubleClick, OnEnter, 或者 OnLeave。

=== 文字 ===
要在面板中建立文本对象,使用以下的语法:

{ name = “SomePanel”,
text = {
{ attribute = value, attribute2 = value }, – 文本对象
{ attribute = value, attribute2 = value }, – 另一个文本对象
},
}

* 可以看到,你可以在面板内建立任意多个文本对象。如果你只建立了一个文本对象,可以省略属性值
外面额外的大括号。比如,下面的语法对单一文本对象的面板成立:text = { attribute = value }

* 如果只建立了一个文本,文本对象的名称是panel.text。如果有多个文本对象,会根据建立的顺
序命名为 text1,text2,text3,……等等。

* 想快速的建立文本对象,可以使用text = "字符串"作为一个正常的框架属性值,文本将具有默认的
格式。

* 如果只有一个文本对象,它的宽高将和框架的默认宽高相同。

=== 文本属性 ===
string [“”]
主要显示的文字。也可以是带有返回值的函数,默认情况下函数值将每秒钟更新一次。这个设置非常
方便,这样你就不需要再写一个OnUpdate的脚本来调节了。
例:string = “Buffs”
例:string = function(self)
self.tick = self.tick and self.tick + 1 or 0
return self.tick
end

update [1]
只有当字符串是一个函数的时候才需要这个属性。属性值的单位是秒,也可以使用十进制小数。例:
update = 0.1 (十分之一秒)

font [“Fonts/FRIZQT__.TTF”] http://www.wowwiki.com/API_FontInstance_SetFont
想要使用的字体的路径。放在LP的media文件夹下的字体可以直接给出文件名。
例1:font = “font.ttf” – 如果在’LitePanelsmedia’文件夹下。
例2:font = “Interface\AddOns\SharedMedia\fonts\ABF.ttf” – 如果在别的地方

size [12] http://www.wowwiki.com/API_FontInstance_SetFont
文字的字体大小。

color [{1,1,1}] http://www.wowwiki.com/API_FontInstance_SetTextColor
文字的颜色。

alpha [1.0] http://www.wowwiki.com/API_FontInstance_SetTextColor
文字的透明度,可用值为0.0-1.0。0.0是完全透明,1.0是完全不透明。

outline [0] http://www.wowwiki.com/API_FontInstance_SetFont
文字描边的标志位。1是细描边,2是粗描边。设定描边会将阴影的默认值更改为0。

shadow [1]
设定阴影与文字之间的距离,单位为像素。例:shadow = 1
默认的阴影形式是阴影的偏移量为:x = -y
如果你需要对阴影的表现进行更多的控制,可以用shadow = {属性 = 值}的方式
进行。可用的属性值有以下几种:
: x [1]
: 阴影相对文字的x偏移量
: y [1]
: 阴影相对文字的y偏移量
: color [“0 0 0”]
: 文字阴影的颜色。
: alpha [1]
: 文字阴影的透明度。

mono [false] http://www.wowwiki.com/API_FontInstance_SetFont
文字单色的标志位。

anchor_to [“CENTER”] http://www.wowwiki.com/API_Region_SetPoint
锚定到面板的哪一个位置。

anchor_from [“CENTER”] http://www.wowwiki.com/API_Region_SetPoint
以面板的哪一侧来相对锚点定位。
(似乎应该是“文字的哪一侧”,但是原文是panel)

x_off [0] http://www.wowwiki.com/API_Region_SetPoint
沿x轴移动的像素数。负数向左,正数向右。

y_off [0] http://www.wowwiki.com/API_Region_SetPoint
沿y轴移动的像素数。负数向下,正数向上。

PS:原文中y_off给出的是“x-axis”,x_off给出的是“y-axis”,不知是作者写反了还是本应如此。

justify_h [“CENTER”]
设定文字的水平对齐方式(”LEFT”左对齐,”RIGHT”右对齐,或者”CENTER”居中)

justify_v [“MIDDLE”]
设定文字的垂直对齐方式(”TOP”上对齐,”BOTTOM”下对齐,或者”MIDDLE”居中)

=== 职业颜色 ===
所有的颜色属性都可以很轻易的按照职业进行着色。不需要使用标准的”r g b”形式,可以
直接使用”CLASS”
例:bg_color = “CLASS”, gradient_color = “CLASS”, border_color = “CLASS”

完整的职业颜色列表和其实际颜色值,参见http://www.wowwiki.com/Class_colors

=== 高级:脚本属性 ===
脚本属性和常规属性采用同样的方式定义,但是它们必须设定一个针对该时间的函数。

目前支持的事件句柄:
OnClick, OnDoubleClick, OnMouseUp, OnMouseDown, OnEnter, OnLeave, OnUpdate,
OnResize, OnLoad, OnEvent, OnHide, OnShow

* 这些句柄的具体作用参见wowwiki的相关内容。http://www.wowwiki.com/Widget_handlers

* 当使用OnUpdate脚本的时候,你可以在调节中使用预定义的变量self.elapsed
OnUpdate = function(self, u)
self.elapsed = self.elapsed + u
if elapsed > 3.0 then
– code to run every 3 seconds
self.elapsed = 0
end
end

* 如果为多个句柄定义变量,最好使用 self.变量名 的方式,在OnLoad句柄中进行定义:
OnLoad = function(self)
self.clicks = 0
end,
OnClick = function(self, button)
self.clicks = self.clicks + 1
print(self.clicks, button)
end

————————————————————-
编辑这个布局,保存,然后键入”/reload”来查看变化。

在寻求支持前请完整阅读上面的文档。
————————————————————-
]]

——————————————————————————————
– API: lpanels:CreateLayout(“Layout Name”, { layout code }, { viewport })
– 创建布局。
– » 参数1 - 布局名称。随你怎么写。
– » 参数2 - 表或者对你的布局代码的调用(= =就是布局代码……)
– » 参数3 - 检视区的表(可选)。 比如:{top=10, bottom=100, left=5, right=5}或者{bottom=100}

lpanels:CreateLayout(“Load For All”, {
– 在这里建立一个全局的布局

})

————————————————–
– 示例布局,你可以修改也可以删除。 –
————————————————–
lpanels:CreateLayout( Simple Viewport”, {
– 主检视区背景
{ name = “GreyBox”,
strata = “BACKGROUND”, level = 0,
x_off = 0, y_off = 0,
width = “100%”, height = 125,
bg_color = “0.1 0.1 0.1”, bg_alpha = 1,
text = {
string = “Your Viewport, Sir!”,
size = 10, outline = 1,
},
},
– 定位在检视区区域上方的与职业颜色相同的边缘。
{ name = “TopBorder”, parent = “GreyBox”,
anchor_to = “TOP”, y_off = 1,
width = “100%”, height = 1,
bg_color = “CLASS”, bg_alpha = 0.5,
},
}, { bottom = 125 }) – 可选的检视区配置

lpanels:CreateLayout(“Chat Background”, {
– 左侧聊天框的背景。
{ name = “Chat”, parent = “GreyBox”,
width = 300, height = “100%”,
bg_color = “0 0 0”,
},
– 右侧战斗记录的背景
{ name = “Combatlog”, parent = “GreyBox”,
anchor_to = “BOTTOMRIGHT”,
width = 300, height = “100%”,
bg_color = “0 0 0”,
},
– 聊天框右侧的边线
{ name = “ChatBorder”, parent = “Chat”,
anchor_to = “RIGHT”,
width = 1, height = “100%”,
bg_color = “CLASS”, bg_alpha = 0.5,
},
– 战斗记录左侧的边线
{ name = “CombatlogBorder”, parent = “Combatlog”,
anchor_to = “LEFT”,
width = 1, height = “100%”,
bg_color = “CLASS”, bg_alpha = 0.5,
},
})

——————————————————————————————
– API: lpanels:ApplyLayout(“n:Character r:Realm c:Class”, “layout1”, “layout2”, “layout3”)
– 加载布局。
– » 参数1 - 配置文件字串:可以设定为任何的以下形式的组合 n:角色名, r:服务器名, c:职业,
– 使用一个空格分隔开。如果设为nil,则将布局加载给所有角色。另外,条件前加连字符”-“
– 表示布局在该名字、服务器或职业上不启用。配置文件字串不区分大小写。服务器名中含有
– 空格的必须去除。
– » 参数2,… - 需要加载在该配置文件的布局名称,即CreateLayout()创建时使用的名称。不限
– 制每配置文件加载的布局数量。

lpanels:ApplyLayout(nil, “Load For All”)
lpanels:ApplyLayout(“n:batman”, “Simple Viewport”, “Chat Background”)

–[[
— 更多加载配置文件的例子 —
[1] 在除了名叫Holynovaz的牧师之外所有的牧师下加载名为’priesty’的布局。
lpanels:ApplyLayout(“c:priest -n:holynovaz”, “priesty”)

[2] 除了战士之外,所有的职业都加载’not warrior’布局:
lpanels:ApplyLayout(“-c:warrior”, “not warrior”)

[3] 在服务器Blackwing和Mal’Ghanis的所有角色、所有服务器上名为Ohhai的角色上加载名为’layout1’
和’layout2’的布局:
lpanels:ApplyLayout(“r:blackwinglair r:mal’ghanis n:ohhai”, “layout1”, “layout2”)

[4] 在Hyjal服务器上所有的萨满、所有服务器上名为Lolcoil的角色上加载名为’bars’和’minimap’的布局:
ApplyLayout(“n:lolcoil (r:hyjal c:shaman)”, “bars”, “minimap”)

[5] 在服务器Anvilmar上的Huntz角色、所有的战士角色上加载名为’overlay1’和’overlay2’的布局:
lpanels:ApplyLayout(“(n:huntz r:anvilmar) c:warrior”, “overlay1”, “overlay2”)
]]