WOW插件编写快速入手指南
程序员快速入手指南
作者:炽火 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文件开头添加一行:<?xml version="1.0"
encoding="UTF-8"?>
XML文件主要内容
一个XML文件往往包含以下内容:
Ui标签
<Ui>是最上级标签。其中的schema用来语法检查,如果你的XML编辑器支持还可以用来代码提示。否则对我们来说用处不大。可以简化为:
或者更加简化,不太规范但是可用:<Ui>布局内容</Ui>
Script标签
在Ui标签中最先包含的往往是<Script file="lua 文件名"/>表示在此处载入某lua文件。 注意这里也有顺序哦,如果发现变量、函数不存在,检查一下看是不是顺序问题。
这样一来我们有了两种方法载入lua文件。在xml中载入lua实际上不是非如此不可的,有时候没必要用xml的就直接在toc中放个lua,把xml省掉。这样做你必须在lua中有个入口,也就是有个裸语句(不在任何function中的)进行事件注册或者调用函数。
Frame标签
XML中最主要的一个标签是<Frame></Frame>。所谓Frame意指框架,就是用来包含其他东西的。
UIParent是最上层的框架,所有的UI都包含在其中。与之并列的是一个特殊框架World Frame,
包括FPS、截图。
其它控件一般都是Frame的子类,都包含类似的属性和子标签:背景、贴图、边框、事件处理。如:<button> <slider> <statusbar> 等等。
Frame标签就像一个透明的玻璃容器。你可以仅用它来装载其它部件,当然也可以给他添加贴图显示出来。
记得游戏中按下“Alt+z”的效果了么,被隐藏的就是UIParent。容器被隐藏了,里面装的东西也就透明了。
子标签和属性
UI对象的继承关系
UIObject
始祖,所有其他UI对象都由它继承。
LayoutFrame
布局框架,继承UIObject,主要有一些布局函数,(这是一个虚类不可创建实例)。 LayoutFrame的重要函数:
GetParent() SetParent() GetAlpha() SetAlpha() SetWidth() SetHeight()
Frame
框架,继承Layout Frame,最重要的UI对象,屏幕上可见的UI对象都是它的子类,一
般用来在上面放置其他控件。
LUA —— 脚本代码文件
更深入的学习请阅读本站的其它文章:ProgrammingInLua, 魔兽Api索引
如果你有一门以上的语言基础,那么学习lua语言不是什么难事。
lua是一种灵活的语言,关于他的来源我并不知道多少,只谈一下自己的感受。基本语法和Basic类似,或者说更像是Asp的脚本语言吧。但同时他又借鉴了Java的长处,更加的智能化、灵活。写法多样又方便不同习惯的人上手。
lua语法很简单,相关资料也很多,我只列出需要注意的部分。
基本语法摘要
行注释符号:“--” 段注释符号:“--”;实际上还是行注释,而“”包围的部分编译器会认为是一行。 行结束符号:用“;”或者不写都行,看你的习惯了,只要没有歧义就好 NULL空值:在这里是nil 没有指针:和Java一样,没指针的意思就是所有变量都是引用。要注意不是拷贝的副
本,改变引用变量原始变量会同时改变。
变量作用域:默认是global(全局作用域),加上local前缀就是局部的了(文件内部作用域)。 函数作用域:和变量一样默认是全局作用域。实际上函数也是变量。 数组,集合:只有一种,类似于。。。我也不知道类似什么。写法也很随意,举例:
关于数组的就看上面的“Lua脚本语言入门”,讲的很清楚。
关于布尔变量:要注意的是只有nil和false表示false,其他一律为true(包括0),而false是要占用引用内存的,建议把false一律换成nil。 关于布尔运算:lua里的布尔运算是很有趣的,也相当合理。注意运算的值并不是布尔
值,而是其中一个操作数的值。
是不是有点晕?其实很合理。如果你一时绕不清楚,就只要记住结果好了。
布尔运算的妙用:我坚定地认为lua中的布尔运算实际上不是布尔运算,而是简化了的
条件语句。比如:
对象
在lua里,框架和控件都作为对象存在。 要引用在XML中定义的框架或控件,使用如下语句:
对象的属性
属性在对象中就像集合成员一样,属性引用符号为:“.”,例如:frame. …… 此处隐藏:2296字,全部文档内容请下载后查看。喜欢就下载吧 ……
相关推荐:
- [政务民生]2013年公共基础知识热点问题(七)
- [政务民生]检验检测机构资质认定评审准则及释义20
- [政务民生]关于印发重庆市房屋建筑和市政基础设施
- [政务民生]1、隧道洞身开挖支护施工技术交底书
- [政务民生]2015年山东省17地市中考语文试题分类汇
- [政务民生]2-高级会计师资格考试和评审流程图
- [政务民生]2018版中国清分机行业发展分析及前景策
- [政务民生]新课改高中政治探究
- [政务民生]2018-2024年中国新型组合房屋行业投资
- [政务民生]2015年上海市春季高考数学模拟试卷五
- [政务民生]灌砂法及环刀法测压实度(带计算过程)
- [政务民生]运筹学实验2求解非线性规划
- [政务民生]劝学、逍遥游默写(教师卷)
- [政务民生]《运筹学》 - 期末考试 - 试卷A - 答案
- [政务民生]八年级英语下册 Module 6 Hobbies测试
- [政务民生]2019年宪法知识竞赛试题库100题(含答
- [政务民生]自动化英文文献翻译
- [政务民生]公文格式实施细则
- [政务民生]高一地理上册课堂跟踪练习题6
- [政务民生]会计继续教育习题及答案
- 第三章 无约束最优化方法
- 泛读教程第三册答案
- 魏晋南北朝文学
- 幂的运算复习题
- 城市环境问题的成因与治理策略_以社会
- 钢结构行业产业链及竞争分析研究
- 新型热塑性弹性体增韧聚丙烯的研究
- 中国旅游地理B卷试题及答案
- (苏教版)五年级数学上册第三单元测试卷
- 不稳定性心绞痛诊断与治疗
- 俞氏国际后勤职能部门绩效考核办法
- GB7258-2017新标准考试题含答案
- 小学生汉字听写比赛活动方案
- 1.3《平抛运动》学案 教科版必修2
- 2011香港特别行政区公务员考试复习资料
- 考虑水力条件变化的城市给水管网可靠性
- 表面活性剂在油田开发和生产中的应用
- ITT内部培训资料-FI端吸泵的介绍
- 文明守纪,从我做起学生发言稿
- 初中读《聊斋志异》心得体会800字范文




