🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## **.xml或XML可视元素文件** “ UI元素”或“小部件”是构成用户界面的所有图形的小片段。WoW使用XML来布局您在屏幕上看到的所有内容。另外,当屏幕上的窗口小部件发生事情(称为“事件”,还记得吗?)时,可以调用事件处理程序(即函数)以执行所需的任何操作。不久我们将看到如何告诉WoW我们对哪些小部件感兴趣以及希望由哪个事件处理程序处理哪些事件。 #### 暴雪XML格式声明 我们声明我们的文档符合Blizzard模式并具有以下内容: ~~~ <Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/..\FrameXML\UI.xsd"> <!-- 插件的功能在这里定义 --> </Ui> ~~~ 暴雪在中定义了UI小部件`UI.xsd`。如果您提取了Blizzard接口,则可以在Interface / FrameXML / UI.xsd中找到此文件,或者 wowprogramming.com[在此处](http://wowprogramming.com/FrameXML/UI.xsd)维护在线副本。该[XML的用户界面](https://wow.gamepedia.com/XML_user_interface "XML用户界面")页面有下一张好名单[的Widget元素](https://wow.gamepedia.com/XML_user_interface#Widget_Elements "XML用户界面") ~~~ <Ui xmlns="http://www.blizzard.com/wow/ui/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.blizzard.com/wow/ui/..\FrameXML\UI.xsd"> <!-- 表示在此处载入xxoo.lua文件(非必须的,如果没有xml文件,我们直接在toc中放个lua文件就可以), --> <Script File="xxoo.lua"/> <!--Frame是包含UI元素的,UIParent是最顶层的框架,所有的UI都包含在其中,他在游戏里是透明的。与之并列的是一个特殊的World Frame包括FPS、截图,其他的ui控件都是Frame的子类--> <Frame name="eCoordinates" parent="UIParent"> <Scripts> <OnLoad function="eCoordinates_OnLoad"></OnLoad> <OnEvent function="eCoordinates_OnEvent"></OnEvent> </Scripts> </Frame> </Ui> ~~~ ``` <Frame name="名称,唯一" inherits="myFather继承" toplevel="true 等级" parent="UIParent 父标签" id="编号" movable="true 可移动" enableMouse="true 允许鼠标事件" frameStrata="HIGH层级" hidden="false隐藏"> <Size> <!--大小--> <AbsDimension x="" y="" /><!--绝对尺寸--> </Size> <!--简化方法一> <size x="" y="" /> <Anchors> <!--锚点,用来标记相对位置--> <Anchor Point="本控件的参考点" relativeTo="参考控件" relativePoint="参考控件的参考点"> <Offset> <!--偏移值--> <AbsDimension x="" y="" /> </Offset> <!--简化写法--> <Offset x="" y="" /> </Anchor> </Anchors> <!--背景和边框--> <Backdrop name= "$parentBackdrop" bgFile="背景贴图" edgeFile="边框贴图" tile="不知道"> <EdgeSize> <AbsValue val="18" /> <!--边框缩放大小--> </EdgeSize> <TileSize> <Absvalue val="16" /> </TileSize> <BackgroundInsets> <AbsInset left="5" right="5" top="5" bottom="5"/> <!--背景四周留白--> </BackgroundInsets> </Backdrop> <Layers> <!--分层,主要放置贴图材质和字符--> <Layer level="BACKGROUND"> <!--背景层--> <Texture name="$parentRed" file="贴图" hidden="true"/> </Layer> <Layer level="ARTWORK"> <!-- 艺术层--> <FontString name="$parent名字" inherits="Font" justifyH="CENTER"/> </Layer> <Layer level="OVERLAY"> <!-- 覆盖层--> <Texture name="$parentShine" file="贴图" alphaMode="ADD透明模式" hidden="true"> <Anchors> <Anchor point=?,CENTER"/> </Anchors> </Texture> </Layer> </Layers> <Frames> <!--嵌入其他框架--> </Frames> <Scripts> <OnLoad>处理载入事件</OnLoad> <OnEvent>处理用RegisterEvent注册过的事件</OnEvent> <OnUpdate>更新事件 </OnUpdate> <OnShow>显示事件 </OnShow> <OnHide>隐藏事件 </OnHide> <OnClick>单击事件</OnClick> <OnDoubleClick>双击事件</OnDoubleClick> <OnEnter>鼠标键入</OnEnter> <OnLeave>鼠标移出 </OnLeave> <OnDragStart>拖放开始</OnDragStart> <OnReceiveDrag>接受受拖放</OnReceiveDrag> <OnValueChanged>值改变(用于 Slider 滑块)</OnValueChanged> </Scripts> </Frame> ``` ## inherits 和 parent 的区别 | | | | --- | --- | | inherits | 继承,表示本控件未标明的属性全部继承自某控件(包括事件处理脚本) | | parent | 父控件,表示依存关系,如果父控件隐藏了那么子控件也会隐藏 | ## Anchor锚点中的定位规则 | | | | --- | --- | | Point| 自身参考点 | | relativeTo| 参考控件 | | relativePoint|参考控件参考点 比如一个正方形的按钮:`<Anchor Point="LEFT" relatriveTo="$parent" relativePoint="Right">`的意思是:我的左边对父控件的右边,效果就是按钮始终在父控件的右边| ## **UI对象的继承关系** * UIObject 始祖所有的ui对象都是继承与它 * * LayoutFrame 布局框架,继承UIObject,主要有一些布局函数(这是一个虚类不可创建实例) LayoutFrame的一些重要函数 GetParent() Setparent() GetAlpha() SetAlpha() SetWidth() SetHeight() IsShow() 是否显示,表示一种属性,如果父对象可见的时候是否会显示 IsVisible() 是否可见,表示当前状态当前对象在屏幕上有没有显示 * * * Farme 框架,继承与LayoutFrame,最重要的UI对象屏幕上可见的UI对象都是他的子类,一般在它上面放置其他控件 * * * * Button 按钮 * EditBox 可编辑文本框 * GameTooltip 鼠标提示 * ColorSelect 颜色选择器 * MessageFrame 信息框架 * MiniMap 迷你地图,小地图,战场地图等 * Model 模型,用于显示3D动画 人物模型,冷却都是Model * MovieFrame 电影框架(放电影的?) * ScrollFrame 可滚动框架 * ScrollingMEssageFrame 滚动信息框架例如聊天窗口、战斗信息窗口 * SimpleHTML 类似网页的可以定义图片文字大小颜色的文本 * slider 滑块像系统设置中的ui缩放那种滑块 * statusbar 进度条 像是施法条,血条等等