0

焦点头条

【小雪】插件制作教学系列(二)《无界面插件教学》

2014-02-23 14:51| 查看: 9590 |作者: 小雪




动态目录

所谓的动态目录,就是可以添加与删除目录项的目录,像上面那种是做不到的。
通过cube代码调试器,我们试着做一个动态的目录玩玩。

首先,建立一个空的全局空目录,用于存储动态数据:
mymenudata={}
输入这个后,运行后删除这一行。然后Output(mymenudata)来看看是否已经创建了一个全局的目录变量。

接下来定义一个将名字添加到mymenudata中的匿名函数:

local fnAddToList=function(szName)
if szName=="" or szName==nil then return end
table.insert(mymenudata,szName)
end

再来就开始构造一个简单的固定2级目录框架:

local menu={
{szOption="我的动态目录"},
{bDevide=true}
}
local datalist={szOption="数据测试列表"}
local addtolist={szOption="添加",fnAction=function()
                                                        GetUserInput(
                                                        "请输入列表名字",
                                                        fnAddToList,
                                                        nil,
                                                        nil,
                                                        nil,
                                                        ""
                                                        )
                                                        end}
table.insert(menu,datalist)
table.insert(menu,addtolist)

将这个目录分开,是为了在datalist里面添加动态列表,合在一起无法进行添加。

然后,就是遍历mymenudata来一个个导入里面的数据,以达到动态效果。
总的来说,就是通过改变mymenudata的数据,来改变PopupMenu

for i,v in pairs(mymenudata) do
       local data=
{
                           szOption=v,{szOption="删除",fnAction=function() mymenudata[i]=nil end,fnAutoClose=function() return true end}
}
table.insert(datalist,data)
end

遍历mymenudata里面的每一项,然后为每一项建立目录,并且导入datalist里面。
所谓的删除其实就是将目录变量里面的值等于空,这样就删除了目录里面的这对值,并且关闭目录,下次再打开的时候就不会添加这个了,所以,变相达到删除的目的。

为了所谓的用户方便,再加上一个清空列表的目录:

if next(mymenudata)~=nil then
table.insert(datalist,{bDevide=true})
table.insert(datalist,{szOption="清空列表",fnAction=function() mymenudata={} end})
end

这里next(mymenudata)是判断mymenudata这个表格是否为空,next的作用是返回表格中下一项的array(序列)跟值,参数为:next(表格,序号)
比如说一个表格:
t={1,2,3,4,5}
next(t)返回值是1,1
next(t,1)返回值是2,2
next(t,2)返回值是3,3
以此类推,next(t)返回值为空的时候,就表示这个表格是空的。

像是t=={}t==nil这类的判断是不对的
前者是判断表格t跟匿名表格的地址位置,两个地址位置永远是不相同的
后者是判断t是否为空,然而t={}并不是空值
所以使用next(t)来判断。

于是,一个简单的动态目录就完成了:

 

收藏 分享 邀请

发表评论

查看全部评论(1)
游客 2014-09-26 06:29
<p>1、找到自己最好的微笑,并将它随时奉献给客人。 <br><br>2、愿我的微笑像春风一样温暖着客人的心。 <br><br>3、愿我的每一个微笑都能给您带来一份轻松与快乐! <br><br>4、有了它家庭充满幸福,有了它生意兴隆荣耀,它还是朋友间交流的暗号。 <br><br>5、用我的真诚微笑留住每位客人。 <br><br>6、永远微笑吧!在人生的旅途上,最好的身份证就是——微笑。 <br><br>7、营业员的微笑必须是发自内心的,不能皮笑肉不笑。要出会心 ...
引用

查看全部评论(1)

关注订阅号"剑网3PVE"
获取第一手剑三资讯


您当前使用的浏览器版本过低,网站部分功能可能失效,请更换合适的浏览器。了解更多