本帖最后由 蓝烟清 于 2011-9-28 23:27 编辑
战斗招式之前已经说明了,接着准备说战斗特效,但是在说特效之前,有一些战斗的变量必须得先了解,否则战斗特效就很难明白
WAR={}; 全局变量,所有的战斗数据都保存在这个数组中
下面是战斗中人物的属性数组,WAR.Person是不分敌我的,需要使用 if WAR.Person[id]["我方"] then 判断是已方,另外也可以使用 if WAR.Person[id]["我方"]==false then 来判断敌方- WAR.Person[i]={}; --声明数组结构
- WAR.Person[i]["人物编号"]=-1; --人物的编号
- WAR.Person[i]["我方"]=true; --true 我方,false敌人
- WAR.Person[i]["坐标X"]=-1; --人物当前所站位置的X坐标
- WAR.Person[i]["坐标Y"]=-1; --人物当前所站位置的Y坐标
- WAR.Person[i]["死亡"]=true; --true已经死亡,false未死亡
- WAR.Person[i]["人方向"]=-1; --人物面对的方向
- WAR.Person[i]["贴图"]=-1; --人物的贴图
- WAR.Person[i]["贴图类型"]=0; --0 wmap中贴图,1 fight***中贴图
- WAR.Person[i]["轻功"]=0; --人物轻功
- WAR.Person[i]["移动步数"]=0; --可移动的步数
- WAR.Person[i]["点数"]=0; --修练点数
- WAR.Person[i]["经验"]=0; --人物经验值
- WAR.Person[i]["自动选择对手"]=-1; --自动战斗中每个人选择的战斗对手
- WAR.Person[i]["Status"]=0; --状态,作用未知,似乎没在使用
- WAR.Person[i]["Move"]={}; --可移动的范围,在War_MovePerson函数计算
- WAR.Person[i]["Action"]={}; --人物行为,似乎也没在使用了,在即时制版攻击行为被注释起来
- WAR.Person[i]["Time"]=0; --人物集气值
- WAR.Person[i]["TimeAdd"]=0; --集气的增加量,如果为负,则减集气
- WAR.Person[i]["SpdAdd"]=0; --速度加成,似乎没见在用,应该是换成了TimeAdd
- WAR.Person[i]["Point"]=0; --作用未知
- WAR.Person[i]["特效动画"]=-1; --内功加力或者护体等出现的人物上的圈
- WAR.Person[i]["反击武功"]=-1; --斗转专用的了
- WAR.Person[i]["特效文字1"]=nil; --最上层,默认红色,暴气会心一击,你懂的
- WAR.Person[i]["特效文字2"]=nil; --中间层,各种内功加力使用的
- WAR.Person[i]["特效文字3"]=nil; --最低层,默认白色,招式默认使用的
复制代码 还有几个变量
WAR.PersonNum --战场上的总人数,包括敌人
WAR.CurID --当前满集气人在战场上的ID
WAR.LifeNum --当前战场上剩余的总人数
暂时这么多吧,还有一些以后不过没有了解得好,特别是WAR.tmp,蛤蟆蓄力、人物不同资质平滑升级等都用到它
利用上面的变量,咱们就可以做一些简单的特效,不过目前只用通过修改drawname函数来实现了(悲剧的绘画名字的函数,只能将就着了)
做一个主角攻击出个蛤蟆功动画的特效吧(只是有动画,没有实际效果)- function drawname(x,y,name,size)
- x=x-math.modf(size/2)
- local namelen=string.len(name)/2
- local zi={}
- for i = 1, namelen do
- zi[i] = string.sub(name, i * 2 - 1, i * 2)
- DrawString(x, y, zi[i], C_WHITE, size)
- y = y + size
- end
-
- -------上面部分是drawname函数的源码,保留不管----------
-
-
- if WAR.Person[WAR.CurID]["我方"] == false then --如果是敌人,直接返回
- do return;end
- end
-
-
- local pid=WAR.Person[WAR.CurID]['人物编号']; --获取当前行动人物的编号
- if pid == 0 then --如果是主角,主角编号为0嘛
- WAR.Person[WAR.CurID]["特效动画"]=math.fmod(95,10)+85; --蛤蟆功的动画
- WAR.Person[WAR.CurID]["特效文字1"]="自创·主角特效"; --红色的,看起来舒服
- end
-
- --[[
- --上面是比较简单的了,主角攻击必出,但是呢连击的时候没有效果 - -。 没清楚S大的连击机制,还有待研究啊
- --下面来个更复杂点的,为了不冲突,下面的代码全部先注释,想用的时候自己去掉注释哦
- --我们接着的目标是针对武功才出动画特效。 学了易筋经必出特效吧
- if pid == 0 then --还是主角
- for i=1,10 do
- local kfid=JY.Person[pid]["武功"..i];
- if kfid == 108 then --易筋经的武功编号是108
- WAR.Person[WAR.CurID]["特效动画"]=math.fmod(95,10)+108; --易筋经的动画
- WAR.Person[WAR.CurID]["特效文字1"]="自创·易筋经特效"; --红色的
- --WAR.Person[WAR.CurID]["特效文字2"]="自创·易筋经加力"; --经测试,特效文字2不能改,不清楚什么情况
- break;
- end
- end
- end
- --]]
- end
复制代码 把drawname函数的代码复制到新文件drawname.lua,再用DIY.lua加载就可以了。 如果一点基础都没有,估计不懂怎么回事。。。
|