请问各位高手大大,在下今天研究了一整天的函数顺序,可是到现在还是无法做出按 esc 就回到武功选
单的效果,在经过分析类似做法的使毒与医疗等选单效果后,想请教几个问题
1.
以医疗效果来说,它是在 War_Manual_Sub 函数里的 warmenu 里呼叫 War_DoctorMenu 函数
而 War_DoctorMenu 会去抓取 War_ExecuteMenu 里的判断式回传的值再将其回传到 War_Manual_Sub
但是在 War_ExecuteMenu 里只有这样一段
local x1, y1 = War_SelectMove() 是呼叫移动范围的计算函数 ?
if x1 == nil then  x1 坐标为空的意思 ?
lib.GetKey() 抓取键盘值 ?
Cls()
return 0
else
return War_ExecuteMenu_Sub(x1, y1, flag, thingid) 将 War_ExecuteMenu_Sub 的值回传到上一层
end
完全没看到关于 esc 的相关设定,其他相关的类似功能也是如此判定
为何不用像
if keypress == VK_ESCAPE then
DIYdisplay("xxxx")
return 1
end
之类的做法去抓取 esc 键的值 ?
再者,War_ExecuteMenu也没写到按 esc 后会回传的值,那为何最后一定会跳回主选单 ?
同样的问题在我试着研究 DIY_War_Fightmenu 时看到以下这一段
if k ~= 0 then
if k > c then
k = c
end
WAR.ShowHead = 0
if MPPD(pid) == 7 then --ignore building restriction
WAR.BH[pid] = 1
end
--以下开始 r 与 else 后的 r 宣告不同,why ?
local r = War_Fight_Sub(WAR.CurID, canuse[k])
WAR.BH[pid] = nil
WAR.ShowHead = 1
Cls()
return r --将 r(War_fight_sub) 传回来的值再传回给上一层 ?
else
local r = nil
r = ShowMenu(menu, numwugong, 0, CC.MainSubMenuX, CC.MainSubMenuY, 0, 0, 1, 1, CC.DefaultFont, C_ORANGE, C_WHITE)
if r == 0 then
return 0
end
WAR.ShowHead = 0
if MPPD(pid) == 7 then --ignore building restriction
WAR.BH[pid] = 1
end
local r2 = War_Fight_Sub(WAR.CurID, r)
WAR.BH[pid] = nil
WAR.ShowHead = 1
Cls()
return r2 --将 r2(War_fight_sub) 传回来的值再传回给上一层 ?
end
我试着在 War_Fight_Sub 加入
local keypress = lib.GetKey()
if keypress == VK_ESCAPE then
return 0
end
此段应该是按 esc 会将 War_fight_Sub 的值回传为 0 对吗 ?
然后我要如何在 DIY_War_FightMenu 里加入判断式才会让 DIY_War_FightMenu 重新跑一次 ?
以做成取消武功攻击点后会回到武功选单的效果 ?
如果是在 local r = War_Fight_Sub(WAR.CurID, canuse[k]) 加入
If r == 0 then 的判断式的话
却因为这已经是函数的尾巴,不会再呼叫函数本身了不是 ?
希望能有大大协助解决~~感谢
|