在石器时代LUA以往的教学里,循环事件我都是利用了NetLoopFunction来讲解案例等,NetLoopFunction是针对全局来循环,咱们可以理解为整个石器时代游戏系统的循环,他不需要任何索引进行循环,但有个不便之处就是这个内置的循环是按照分钟来进行计算。也就是每分钟才执行一次,但有时候我们需要精确到秒的时候,比如咱们需要一个按秒倒计时的功能,这个NetLoopFunction函数就没办法了。因为咱们需要一个用秒来计算的函数。
在石器代码里有系统循环和NPC/人物循环两种,我在之前某代码ABLUA循环事件BUG有提到这个循环,这个NPC/人物循环正是我今天要讲到的。这里我会通过LUA脚本代码的方式来讲述这个循环事件。
参考代码:
--循环函数 function Loop(meindex) --循环可执行的代码,以秒为单位 end function Create(name, metamo, floor, x, y, dir) npcindex = npc.CreateNpc(name, metamo, floor, x, y, dir) char.setFunctionPointer(npcindex, "循环事件", "Loop", "") end function main() Create("循环测试", 43651, 777, 17, 17, 7) end
咱们可以从代码上看到在Create函数里给NPC增加了函数事件,而Loop正是这个函数,注意在Create函数里循环事件后面的那个Loop是对应上面的Loop(meindex),其中meindex表示的是这个NPC的索引。
然后Loop这个函数就跟NetLoopFunction功能是一样的了,只不过是按照秒的单位来计算,下面我们写一个简单的计时进行说话的功能。
--循环函数 function Loop(meindex) --循环可执行的代码,以秒为单位 --当looptimer累计值达到60和以上时则开始执行说话功能 if looptimer >= 60 then --对着服务器全员进行说话 char.talkToServer(-1, "欢迎来到石器发布网,这里是石器的牧羊人", "紫色") --执行完毕后让looptimer归0后可以继续累计计算值 looptimer = 0 end --下面这句的意思是每执行一次,looptimer这个值就累计+1 looptimer = looptimer + 1 end function data() --定义一个变量,让它通过Loop来计算数字,初始化为0 looptimer = 0 end function Create(name, metamo, floor, x, y, dir) npcindex = npc.CreateNpc(name, metamo, floor, x, y, dir) char.setFunctionPointer(npcindex, "循环事件", "Loop", "") end function main() data() Create("循环测试", 43651, 777, 17, 17, 7) end
通过代码咱们可以看到利用NPC的循环函数可以以秒单位来进行循环事件,也是非常方便的。这里运用到的计时变量是让计时变量达到判断的数值归0后再继续循环累计数值,其实也可以利用摩尔求余的方式进行计算,这里就不多讲,以后的教学里将会提到。
发表评论
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。