|
本帖最后由 woabclf 于 2020-8-14 15:23 编辑
第九讲 菜单选项 第十一讲 菜单选项扩展 第五讲 武功招式修改
今天讲蓝烟清最后的教学补正,菜单选项,上一篇(剧情篇)我有谈到学菜单选项要先学一个特别的东西。
数组 (表变量,阵列)
有普通数组和多维数组两种,我这里只讲数组在金群的代码使用方式,想更了解数组可以去找百科。
今天我先谈几种数组教学: 普通数组(一维数组)
先从设置数组变量开始:
---------
local abc = {} --这就是设置数组变量abc,跟数字变量的 local abc = 0 相同
---------
已设置abc变量后怎么输入数值?如果是二四六八十,可以用for回圈
---------
for j=1, 5 do
abc[j] = j*2 --abc后要输入小括号,代表变量的编号位置,等号后面是数值
end
---------
数组变量的好处就是可以大量存取资料,不像普通的数字变量只能存一个
如果要清除全部的数组资料跟开头是相似的方式,差在不需要输入local
abc = {} --一到五全部清空
也可以直接把数值先输入进去,不规则数字 (连续数字可以用for回圈)
local abc = {1,5,11,14,16} --数值不规则,但它的数组编号一样是1到5
怎么读取?例如我要读取编号3的位置要怎么写,用说话函数输出 (say函数)
-------
say("abc的编号3是"..abc[3], 0, 1) --编号3就是11,逗号后面的0是主角的id编号,1是种类 (0与1)
-------
可以看到主角说出 "abc的编号3是11" (改成abc[5]就是16)
二维数组 (多维数组)
就是在变量的小括号后面再加一个小括号的意思 abc[j][k] = xxx
如果是三维数组就是变三个 abc[j][k][l] = xxx
设置二维数组的方式: (延用上面的变量abc,有五个编号位置)
abc[2] = {4,6,12} --设置三个位置,abc[2][1] 就是4,abc[2][3]就是12
如果一开始就想设置二维数组要怎么做?创造一个新变量kf,里面存文字。
local kf = {{8,"天山六阳掌",1000}, {16,"太极拳",800}, {21,"玄冥神掌",1100}, {26,"降龙十八掌",1500}}
两个大括号包住里面的资料,外面在包两个大括号,用逗号分开,数组的三个位置分别是武功id、名子和威力。
第一个括号天山六阳掌就是编号位置一(kf[1]),最后一个位置降龙掌就是编号四(kf[4])
如果想读取武功名降龙十八掌不能用 kf[4] 而是 kf[4][2] 位置二才是武功名,位置一是武功id
假如编号位置多到不可考怎么读取资料? (遇到大数组)
使用一种特别的for回圈 for i,v in pairs(数组变量) do (出招时常用的回圈)
------------
for i,v in pairs(kf) do --用kf做例子
local num = i --特别列出的一行,如果想知道数组位置(kf的降龙是4),直接输入i就是编号位置
local wid = v[1] --v in pairs的语法,v[1]就是第一个位置,武功编号
local name = v[2] --v[2]是第二个位置,在数组kf中就是武功名
local wgwl = v[3] --v[3]是第三个位置,后面的v[4]或v[5]都是同样的逻辑,如果有的话
if wid == 16 then --找到太极拳回报威力
QZXS("武功威力是"..wgwl) --顺便教教弹出框QZXS,要用大写,格式最简颠,只有文字串
QZXS("武功威力是"..v[3]) --如果前面的变量设置都懒得做的话直接用v[n]
end
Cls() --清除前一个弹出框
if name == "降龙十八掌" then --找到降龙回报kf位置,输入i或num都可以
DrawStrBox(-1,-1,"降龙掌的位置编号是"..num, C_WHITE, 30) --顺便教教弹出框 DrawStrBox
--前面两个数值是x和y坐标(-1是中间),后一个是文字,再后一个是文字颜色(白),最后是文字大小
ShowScreen() --放映动画函数,不用这个看不到
WaitKey() --等待函数,按任意键结束文字显示
end
end
--也可以使用这种写法
for j=1, #kf do --我有时都用这种方式 (忘了in pairs写法)
local num = j
local wid = kf[j][1]
local name = kf[j][2]
local wgwl = kf[j][3]
end
------------
数组的教学到此结束,接下来讲菜单选项在黑山的变化:
竖向菜单 ShowMenu() 在黑山完全一样,没有改变。
而横向菜单被删除,增加一种类似JYMsgBox函数的新菜单 ShowMenu2()
大致上都和初版菜单相差不远,我只教新增的地方。
ShowMenu2(menu,itemNum,numShow, showRow, x1,y1,x2,y2,isBox,isEsc,size,color,selectColor, str, selIndex)
一行个数 最大行数 字段 跳到选项
位置三(numShow)是一行中有几个选项,位置四(showRow)是一页中的最大行数。
isEsc是可否用Esc取消,1是可,0是否,selectColor是选项中的文字颜色(不同其它)
str是新增的字段,一般是说明菜单功能,selIndex是菜单一开始跳到第几选项(10就是第十个)。
蓝烟清的菜单教学有用到local function,这是一个大领域,初学者又要懵了,这不适合放在教学里。
教教怎么读写菜单 (列出全轻功)
-----------
local menu = {} --设置数组 menu
local mm = 0 --菜单数量
for k = 1, JY.WugongNum-1 do --全武功写法
if JY.Wugong[k]["武功类型"] == 7 then --挑出轻功
mm = mm + 1
menu[mm] = {JY.Wugong[k]["名称"], nil, 1, k} --写入菜单,二维数组
--ShowMenu的格式,第一是字段,第二是使用函数,没有就是nil,第三是显示项目,没有就是0,第四是记录ID
end
end
local xx1 = CC.ScreenW/5
local yy1 = CC.ScreenH/5-CC.DefaultFont*4 + CC.SingleLineHeight
DrawStrBox(-1,-1,"请选择轻功",C_WHITE,35) --弹出框
local r = ShowMenu(menu, #menu, 15, xx1, yy1, 0, 0, 1, 1, CC.DefaultFont, C_ORANGE, C_WHITE) --列出菜单
if r > 0 then --如果取消不会闪退,按Esc,r就是0
say("我选择了"..menu[r][1], 0, 1) --读取二维数组menu,r就是选出的选项,[1]就是各选项记录的武功名
end
----------
用新菜单列出全内功:
----------
local menu = {}
local mm = 0 --菜单数量
for k = 1, JY.WugongNum-1 do
if JY.Wugong[k]["武功类型"] == 6 then --挑出内功
mm = mm + 1
menu[mm] = {JY.Wugong[k]["名称"],nil,1,k} --也可以使用第五个位置(含原菜单),效果同第四个是记录数值
end
end
local xx1 = CC.ScreenW/8-50
local yy1 = CC.ScreenH/8 + CC.SingleLineHeight
local r = ShowMenu2(menu, #menu, 5, 12, xx1, yy1, 0, 0, 1, 1, CC.DefaultFont, C_ORANGE, C_WHITE,"请选择内功", 1)
--列出新菜单,格式最后的selIndex(1)也可以不写,只到字段就行
if r == 0 then do return end end --如果取消直接结束
local wid = menu[r][4] --设变量wid,用二维数组menu输入,[4]就是各选项记录的武功ID
say("我选择了"..menu[r][1]..",武功编号是"..wid, 0, 1)
---------
如果有看过我前三篇帖子的人,想换主角的天赋内功或轻功就知道代码怎么修改了,可以自己Diy。
黑山的武功出招
武功招式是我特别要讲的,这也是二维数组,篮大说武功招式的表在这个全局变量(CC.KfName).
所有的武功招式都在CC.KfName这个表中,这是苍炎时代的出招表,黑山不是使用这个全局变量。
旧数据的格式为 {武功编号, "招式名称" , 杀集气威力}
CC.KfName={
{2,'饭来张口',600}, --逍遥游
{2,'沿门托钵',600},
{2,'见人伸手',600},
黑山使用的全局变量(CC.KfMove) 后面是武功编号
新数据的格式为 {"招式名称", 杀集气威力} (在这个档案中jyconst.lua)
CC.KFMove[2]={
{'饭来张口',600},
{'沿门托钵',600},
{'见人伸手',600}
教学全部讲完了,剩下的是二宫的战斗系统教学,我把这些归类为DIY进阶版。
难度并不低,如果四篇教学帖都能看得懂的人才比较适合学习进阶版DIY。
|
|