铁血丹心

 找回密码
 我要成为铁血侠客
搜索
查看: 2200|回复: 1

[分享] 重新补充几位大大的DIY教学(蓝烟清,SYP) (菜单选项)

[复制链接]
发表于 2020-8-13 14:24 | 显示全部楼层 |阅读模式

马上注册,结交更多侠友!

您需要 登录 才可以下载或查看,没有账号?我要成为铁血侠客

x
本帖最后由 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。





【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。
 楼主| 发表于 2020-8-13 15:08 | 显示全部楼层
不知道为什么字体变为斜体,又改不回来,怪~
【武侠.中国】铁血丹心论坛(大武侠):致力于推广和发展武侠文化,让我们一起努力,做全球最大的武侠社区。
可能是目前为止最好的金庸群侠传MOD游戏交流论坛,各种经典武侠游戏等你来玩,各种开源制作工具等你来实现你的游戏开发之梦。

本版积分规则

小黑屋|手机版|铁血丹心

GMT+8, 2024-5-5 17:34

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表