WOW插件编写快速入手指南
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
程序员快速入手指南
作者:炽火Zero ℃
原文发表于:猫扑魔兽板块实用资料区
引言
本文将以一般的软件编程的眼光审视魔兽插件。剥去其难解的外皮,让你有个清晰的大致了解。
“一针见血”是技术性教学文章的最高境界——炽火
魔兽插件的架构
插件工程——每个插件就是一个项目(或称为工程)。目录位置:魔兽目录\Interface\Addons\项目名\
工程描述——即后缀名为Toc的文件。描述工程的必要信息,也是项目载入时的总入口。
屏幕布局——布局描述使用XML文件。使用各种标签代表特定对象(控件),并描述相互位置及各种特征属性。
功能脚本——脚本文件使用LUA语言。使用WoW提供的API函数编写代码实现各种具体操作。
TOC ——工程描述文件
后缀名为toc的文件就是工程文件,包含工程的基本信息。主要包含以下内容:
切换行号显示
1 ##Interface:适用的魔兽版本号
2 ##Title:显示的标题(默认语言)
3 ##Notes:显示的说明(默认语言)
4 ##Title-zhCN:特定语言的标题(简体中文)
5 ##Notes-zhCN:特定语言的说明(简体中文)
6 ## Author: 作者(不显示)
7 ## Version: 版本
8 ## eMail: 如题
9 ## UIType: 插件类型
10 ##Dependencies:依赖的插件
11 ##RequiredDeps:必须依赖的其他插件
12 ##OptionalDeps:可选倚赖
13 ##SavedVariables:统一存放的变量
14 ##SavedVariablesPerCharacter:按角色存放的变量
15 ##LoadOnDemand: 1 (调用时加载)
16 ##LoadWith:当指定插件加载时才加载,前提是调用时加载
17 ##DefaultState: disabled 默认状态
18 ##Secure:安全(功能未知)
19 # 注释1 dklasjfkasdj
20 Script.lua -- 脚本文件
21 % 注释2 dskajfklasdjfklsdaj
22 Layout.xml -- 布局文件
∙‘#’和‘%’为行注释符号。
∙而以##开头的注释行可就不光是好看的了,这些都是插件的工程描述标记,要是不注意插件根本就不会载入。
∙示例中彩色的标记表示标准标记,每个标准标记都有特定功能。其它eMail, Author等为扩展标记,只有注释功能。
∙工程标记之后的部分为包含文件列表,脚本文件和布局文件,数量随意,但每种至少要有一个:一个lua或一个xml。
包含文件列表中的顺序对应着载入顺序,非常要紧!!!!
如果要写中文,一定要将toc文件保存为UTF-8格式,否则无法正确识别。方法很简单:用记事本打开,另存为,选择编码就行;文件格式要选所有文件,否则会存成txt文件。
建议你多下几个插件,打开看看,参考一下。
XML ——屏幕布局描述文件
在魔兽插件中使用XML来描述UI的屏幕布局。
∙注释符号: 。
∙如果要写中文注释,必须在XML文件开头添加一行:
encoding="UTF-8"?>
XML文件主要内容
一个XML文件往往包含以下内容:
Ui标签
或者更加简化,不太规范但是可用:
Script标签
在Ui标签中最先包含的往往是表示在此处载入某lua文件。
注意这里也有顺序哦,如果发现变量、函数不存在,检查一下看是不是顺序问题。
这样一来我们有了两种方法载入lua文件。在xml中载入lua实际上不是非如此不可的,有时候没必要用xml的就直接在toc中放个lua,把xml省掉。这样做你必须在lua中有个入口,也就是有个裸语句(不在任何function中的)进行事件注册或者调用函数。
Frame标签
XML中最主要的一个标签是。所谓Frame意指框架,就是用来包含其他东西的。
UIParent是最上层的框架,所有的UI都包含在其中。与之并列的是一个特殊框架World Frame,
包括FPS、截图。
其它控件一般都是Frame的子类,都包含类似的属性和子标签:背景、贴图、边框、事件处理。如:
Frame标签就像一个透明的玻璃容器。你可以仅用它来装载其它部件,当然也可以给他添加贴图显示出来。
记得游戏中按下“Alt+z”的效果了么,被隐藏的就是UIParent。容器被隐藏了,里面装的东西也就透明了。
子标签和属性
∙
UI对象的继承关系
UIObject
始祖,所有其他UI对象都由它继承。
LayoutFrame
布局框架,继承UIObject,主要有一些布局函数,(这是一个虚类不可创建实例)。
LayoutFrame的重要函数:
GetParent() SetParent() GetAlpha() SetAlpha() SetWidth() SetHeight()∙
Frame