|
发表于 2009-7-17 22:34:11
|
显示全部楼层
好人截图.........
就是个转圈圈技能......= =|||
关于LZ的第一个Jass技能,在这里想说几点。
第一,多人施法问题,考虑到lz第一次写,就不多说了(看到了lz注释掉的timer.........)。
第二,既然LZ以前玩过RMXP的Ruby脚本,难道就没有缩进的习惯么........
第三,泄漏问题,比如下面一段:
[jass]
set wind[0] = CreateUnitAtLoc( GetOwningPlayer(owner), 'e000',GetUnitLoc(owner), bj_UNIT_FACING)
set windx[0] = ox + 70*Cos(0)
set windy[0] = oy + 70*Sin(0)
call SetUnitX(wind[0],windx[0])
call SetUnitY(wind[0],windy[0])
[/jass]
既然之后要SetUnitXY,就不需要一定要在owner的位置创造了,还多生成了一个点。直接这样:
[jass]
set wind[0] = CreateUnit( GetOwningPlayer(owner), 'e000', 0., 0., 0.)
set windx[0] = ox + 70*Cos(0)
set windy[0] = oy + 70*Sin(0)
call SetUnitX(wind[0],windx[0])
call SetUnitY(wind[0],windy[0])
[/jass]
第四,如果lz不习惯用弧度制的话可以这么写:
[jass]
Cos(30. * bj_DEGTORAD)
[/jass]
第五,不需要定义两个 windx, windy数组吧,反正都是一次性的,一个windx, windy就够用了。其实有时候这种一次性的变量我就直接计算代入了..........比如上面一段:
[jass]
set wind[0] = CreateUnit( GetOwningPlayer(owner), 'e000', ox + 70*Cos(0), oy + 70*Sin(0), 0.)
[/jass]
直接一句话解决,也不需要变量。
第六,没看错的话LZ的windcreate是在一个timer事件里,每xx秒时间事件我不是很清楚,但是timer里是不允许PolledWait()的(本质上是不允许TriggerSleepAction()),这样会导致跳出本函数,之后的语句就无效了,不过你这里正好是最后一句话,所以问题不大。
第七,关于伤害LZ这里写的很尴尬。(选取单位组减生命值,而且没排泄.....),如果这样写,单位死了凶手单位可是没有哦~~虽然我知道让单位飘起来后无敌没法伤害。有一个办法是单位组判断单位的血是否小于40(反正就是你的伤害值),如果是,删除单位飘起的buff,让施法者伤害,如果否,减生命值。其实伤害这一部分最好是放在你的createwind函数内,这样会节约很多效率。
好了,废话了半天,希望对LZ学习Jass有些帮助。 |
|