|
发表于 2011-7-2 16:15:24
|
显示全部楼层
好吧。。。不知道LZ想要的到底是什么效果。。我改出来的效果与LS的差好多额……
嘛。。先上截图吧~
第一遍看的时候会卡,之后就正常了~
马甲的模型我选的是“球体-<复仇之魂-等级1>”,选其它模型的话视觉效果就不一样了,至于圣骑身后那个“柱子”,暂未找到原因……
关于LZ的两个T,我觉得有很多要修改的地方。(如果LZ是贴了这个技能的所有T,以下分析全以这个为前提)
PS:由于我这边现在是凌晨……所以有打错字的地方请谅解下
首先就是多余的变量,比如:
[trigger]未命名触发器 002
事件
单位 - 任意单位 发动技能效果
条件
(施放技能) 等于 咆哮
动作
设置 T = (触发单位)
设置 R = 500.00
设置 R2 = 50.00
设置 Hight = 100.00
设置 Point[0] = (T 的位置)
设置 Angle[0] = (T 的面向角度)
设置 Angle2[0] = (T 的面向角度)
设置 I = 6
设置 I2 = 6
[/trigger]
其中 I 与 I2 完全是两个没有用的变量,因为在接下来的所有动作中并没有动态修改这两个值的动作,所以可以不要,直接用数字6即可,接下来是设置完变量后的部分,本来想分开分析的,但是实在困死了就不弄了,放一起了……如果不方便看,请见谅。
[trigger]未命名触发器 002
事件和条件略……
动作
For 循环整数A 从 1 到 I, 做动作
Loop - 动作
设置 Angle[循环整数A[R]] = ((360.00 / (转换 I 为实数)) x (转换 循环整数A[R] 为实数))
如果所有条件成立则做动作1,否则做动作2
If - 条件
Angle[循环整数A[R]] 大于 180.00
Then - 动作
设置 Point[循环整数A[R]] = (从 Point[0] 开始,距离 (R x (Sin(Angle[循环整数A[R]]))) ,方向为 (Angle[0] + 270.00) 度的位移处)
Else - 动作
设置 Point[循环整数A[R]]] = (从 Point[0] 开始,距离 (R x (Sin(Angle[循环整数A[R]]))) ,方向为 (Angle[0] - 90.00) 度的位移处)
设置 H[循环整数A[R]] = ((R x (Cos(Angle[循环整数A[R]]))) + Hight)
For 循环整数B 从 1 到 I2, 做动作
Loop - 动作
设置 Angle2[循环整数B[R]] = ((360.00 / (转换 I2 为实数)) x (转换 循环整数B[R] 为实数))
如果所有条件成立则做动作1,否则做动作2
If - 条件
Angle[循环整数B[R]] 大于 180.00
Then - 动作
设置 Point2[循环整数B[R]] = (从 Point[循环整数B[R]] 开始,距离 (R2 x (Sin(Angle2[循环整数B[R]]))) ,方向为 (Angle2[0] + 270.00) 度的位移处)
Else - 动作
设置 Point2[循环整数B[R]] = (从 Point[循环整数A[R]] 开始,距离 (R2 x (Sin(Angle2[循环整数B[R]]))) ,方向为 (Angle2[0] - 90.00) 度的位移处)
设置 LC[循环整数B[R]] = (新建 (T 的所有者) 的 小精灵 在 Point2[循环整数B[R]] 面向角度:Angle[0] 度)
动画 - 改变 LC[循环整数B[R]] 的飞行高度为 ((R2 x (Cos(Angle[循环整数B[R]]))) + (H[循环整数A[R]] + Hight)) ,变换速率: 0.00
计时器 - 开启 Timer ,计时方式: 循环 时间设置: 0.05 秒
[/trigger]
1.看出 I 与 I2 没用就是在这两个T之后发现 I 与 I2 根本没有发生任何变化
2.若是仅用作观赏技能那没事,但是若用作游戏,循环整数A与B就很危险了,很有可能会被其它的循环整数A与B取代,也就是说,一张图最好最多只用一次A与B,其它的都用自定义整数,比如:
[trigger]
动作
For Loop[0] 从 1 到 6, 做动作
Loop - 动作
设置 Angle[Loop[0]] = ((360.00 / (转换 I 为实数)) x (转换 Loop[0] 为实数))
如果所有条件成立则做动作1,否则做动作2
If - 条件
Angle[Loop[0]] 大于 180.00
Then - 动作 ……
[/trigger]
3.上面这个T中发现,每次循环的时候,“((360.00 / (转换 I 为实数))”这个值总是不变的,因为 I 始终为6,为何不干脆直接写60呢?于是我猜测 LZ是想要写成“((360.00 / (转换 Loop[0] 为实数))”
4.请看下面这个T:
[trigger]未命名触发器 002
动作
For 循环整数A 从 1 到 I, 做动作
Loop - 动作
设置 Angle[循环整数A[R]] = ((360.00 / (转换 I 为实数)) x (转换 循环整数A[R] 为实数))
如果所有条件成立则做动作1,否则做动作2
If - 条件
Angle[循环整数A[R]] 大于 180.00
Then - 动作
设置 Point[循环整数A[R]] = (从 Point[0] 开始,距离 (R x (Sin(Angle[循环整数A[R]]))) ,方向为 (Angle[0] + 270.00) 度的位移处)
Else - 动作
设置 Point[循环整数A[R]] = (从 Point[0] 开始,距离 (R x (Sin(Angle[循环整数A[R]]))) ,方向为 (Angle[0] - 90.00) 度的位移处)
[/trigger]
不知LZ发现没有,不管Angle是多少,Point[1-6]的值都是一样的……
举个例子:Angle[0]=(T的面向角度),假设为90度;
根据上面这个T的写法,Angle[0] 是不变的,所以 (Angle[0] + 270.00) & (Angle[0] - 90.00) 永远是固定值,但是再仔细看一下,发现这两个值是相等的! 90+270=360 与 90-90=0是同一个方向。
于是,不管Angle[循环整数A[R]]是否大于180,Then和Else的动作所设置的那个Point[循环整数A[R]]都是同一个点。。
当然,循环整数B与第二个T里也是同样的问题,于是我就猜LZ要的可能是下面这样的T:
[trigger]
动作
For Loop[0] 从 1 到 6, 做动作
Loop - 动作
设置 Angle[Loop[0]] = ((360.00 / (转换 Loop[0] 为实数)) x (转换 Loop[0] 为实数))
如果所有条件成立则做动作1,否则做动作2
If - 条件
Angle[Loop[0]] 大于 180.00
Then - 动作
设置 Point[Loop[0]] = (从 Point[0] 开始,距离 (R x (Sin(Angle[Loop[0]]))) ,方向为 (Angle[Loop[0]] + 270.00) 度的位移处)
Else - 动作
设置 Point[Loop[0]] = (从 Point[0] 开始,距离 (R x (Sin(Angle[Loop[0]]))) ,方向为 (Angle[Loop[0]] - 90.00) 度的位移处)
设置 H[Loop[0]] = ((R x (Cos(Angle[Loop[0]]))) + Hight)
For Loop[1] 从 1 到 I2, 做动作
Loop - 动作
设置 Angle2[Loop[1]] = ((360.00 / (转换 Loop[1] 为实数)) x (转换 Loop[1] 为实数))
如果所有条件成立则做动作1,否则做动作2
If - 条件
Angle[Loop[1]] 大于 180.00
Then - 动作
设置 Point2[Loop[1]] = (从 Point[Loop[1]] 开始,距离 (R2 x (Sin(Angle2[Loop[1]]))) ,方向为 (Angle2[Loop[1]] + 270.00) 度的位移处)
Else - 动作
设置 Point2[Loop[1]] = (从 Point[Loop[0]] 开始,距离 (R2 x (Sin(Angle2[Loop[1]]))) ,方向为 (Angle2[Loop[1]] - 90.00) 度的位移处)
设置 LC[Loop[1]] = (新建 (T 的所有者) 的 小精灵 在 Point2[Loop[1]] 面向角度:Angle[0] 度)
动画 - 改变 LC[Loop[1]] 的飞行高度为 ((R2 x (Cos(Angle[Loop[1]]))) + (H[Loop[0]] + Hight)) ,变换速率: 0.00
计时器 - 开启 Timer ,计时方式: 循环 时间设置: 0.05 秒
[/trigger]
5.这第一个T还有两个很严重的问题,其中之一就是排泄问题(当然第二个T也是),这个循环A一共做6次,创建了6个Point,而在这基础上,循环B一共做了36次,创建了36个点,一个都没排泄……
另外,第二个T中:
[trigger]未命名触发器 003
事件
时间 - Timer 到期
条件
动作
For Loop[2] 从 1 到 I, 做动作
Loop - 动作
设置 Angle[Loop[2]] = (Angle[Loop[2]] + 5.00)
如果所有条件成立则做动作1,否则做动作2
If - 条件
Angle[Loop[2]] 大于 180.00
Then - 动作
设置 Point[Loop[2]] = ……
Else - 动作
设置 Point[Loop[2]] = ……
For Loop[3] 从 1 到 I2, 做动作
Loop - 动作
设置 Angle2[Loop[3]] = (Angle2[Loop[3]] - 15.00)
如果所有条件成立则做动作1,否则做动作2
If - 条件
Angle2[Loop[3]] 大于 180.00
Then - 动作
设置 Point2[Loop[3]] = ……
Else - 动作
设置 Point2[Loop[3]] = ……
[/trigger]
每次会创建42个点,但是!!这是个循环的T,循环周期为0.05s!!于是每0.05s创建42个点还没有排泄!!……我已经预见到世界上最强的计算机将会卡死在未来~(不好意思,吐个槽……实在忍不住了……)
6.那么最后,就是关于这个选不到马甲的事情
LZ请看第两个T的关键部分:
[trigger]未命名触发器 002
事件
条件
动作
For Loop[1] 从 1 到 I2, 做动作
Loop - 动作
设置 LC[Loop[1]] = (新建 (T 的所有者) 的 小精灵 在 Point2[Loop[1]] 面向角度:Angle[0] 度)
动画 - 改变 LC[Loop[1]] 的飞行高度为 ((R2 x (Cos(Angle[Loop[1]]))) + (H[Loop[0]] + Hight)) ,变换速率: 0.00
所有循环结束后开启 循环计时器Timer
[/trigger]
[trigger]未命名触发器 003
事件
时间 - Timer 到期
条件
动作
For Loop[3] 从 1 到 I2, 做动作
Loop - 动作
单位 - 设置 LC[Loop[3]] 的X坐标为 (Point2[Loop[3]] 的X轴坐标)
单位 - 设置 LC[Loop[3]] 的Y坐标为 (Point2[Loop[3]] 的Y轴坐标)
动画 - 改变 LC[Loop[3]] 的飞行高度为 ((R2 x (Cos(Angle2[Loop[3]]))) + (H[Loop[2]] + Hight)) ,变换速率: 0.00
[/trigger]
LZ请仔细查看第一个T的给马甲设置变量的动作,可以发现,仅设置了LC[Loop[1]]=LC[1-6]的马甲,但是一共创建了36个马甲,也就是说,之前循环时设置的马甲变量会被之后的覆盖,所以第二个T的马甲相关动作就之后最后一组的马甲会响应。
解决方法呢,我用的是采用动态修改数组的方法设置,用LC[循环整数A*10+循环整数B]来注册马甲
比如第一次循环,那么创建的六个马甲就分别对应LC[11]、LC[12]、LC[13]、LC[14]、LC[15]、LC[16],而第二次循环时就变成LC[2X]了~
同样的,第二个触发里也需要使用相似的设置来对应,比如LC[Loop[2]*10+Loop[3]]
以上~我要去睡觉了额……四点了我晕……
演示图附上:
咆哮(马甲捕捉).w3x
(20 KB, 下载次数: 10)
|
|