|
本帖最后由 woabclf 于 2020-7-24 15:20 编辑
要怎么提升DIY的功力?
有个主要诀窍,蓝烟清蓝大有教过,就是问电脑(游戏),只要学会问电脑就能知道正确答案。
UPedit的资料库调阅不一定能找到正确资料,UPedit常因Mod或版本问题导致资料库混乱。
我也认为直接问电脑最快也最方便,设置事件也最安全 (先后剧情顺序细节等等)
怎么提问?就是用说话函数或弹出框 say 或 DrawStrBox 或 QZXS。
我都用say,后面两个我常记不起来,格式也类似,say比后面两个复杂一点。
但也只是后面多了两个数值 say("str",pid,flag) pid是人物编号 flag用0是主角 1是他人
我觉得flag没什么差别就是了,差在显示框一个在上面,一个在下面。
我比较喜欢下面,都用1 格式 say("str", pid, 1) pid设0就是主角
懂得将字串连接对得知答案更好。
代码:调查主角的坐标
-------------
local str = "我的坐标X "
local x = JY.Base["人X1"] --主角场景坐标x
local y = JY.Base["人Y1"] --主角场景坐标y
local str2 = " 我的坐标Y "
str = str..x..str2..y --重设str变量,将两个字串和答案连成一行,..是连接符号
say(str, 0, 1) --这样就完成了
------------
顺便讲一个让很多人对DIY打退堂鼓的最大原因。
就是不会看 Debug (代码错误回报)
看Debug.txt刚好也是几位大大没有提到却非常重要的编程要素。
有两种代码错误,一种是语法错误,一种是逻辑错误。
语法错误很单纯,格式错了就会闪退。
几点:几分:几秒 ./script/jymain.lua:10712(行数) :attempt to compare nil with number
几点:几分:几秒 stack traceback: (用空值跟数字比较)
./script/jymain.lua:108: in function '__lt'
./script/jymain.lua:10712: in function 'say' (在say函数內)
./script/DIY.lua:3: in main chunk
看似是10712行的错误,但实际上并不一定是10712行的问题 (用空值跟数字比较)
10712行在 say函数里,判断flag数值的位置 say(str,pid,flag,name)
我的实际错误是我的say缺了第三个位置。
say("str",pid) "必需" say("str",pid,flag)
我的say就在 DIY.lua 的第三行,只要在flag补上0或1就行。
第二个例子
几点:几分:几秒 ./script/jymain.lua:10680: attempt to index field '?' (a nil value)
几点:几分:几秒 stack traceback: (尝试索引字串) (空值)
./script/jymain.lua:108: in function '__index'
./script/jymain.lua:10680: in function 'say' (在say函数內)
./script/DIY.lua:4: in main chunk
10680 一样在say函数里 (尝试索引字串) (空值)
代码 10680行
------
name = name or JY.Person[pid]["姓名"]
------
10680行看不出是哪里的问题
找DIY.lua第4行 say("str", pid, 1) "也看不出问题,那就往前找,找DIY和jymain档"
先找DIY档 DIY第2行 local pid = -1
问题找到了,pid不能是负数,把pid转正数就能执行了 (或0) (主角)
这多少有一点概念了吧?
第二种错误,逻辑错误,也叫隐形错误,逐条执行代码会遇到连编程者都没发现的错误。
不会闪退,但你会发现跑出来的数字或战斗攻防非常奇怪,原因跟语法错误(表面错误)没有关系。
这要大师级的功力才能解,其实满多的Mod都有这些隐形错误,尤其是特效越多的Mod越容易遇到。
今天就讲到这里了,下次有空来讲事件函数的总整理。
|
|