签到天数: 1 天 [LV.1]无主之魂
初入阿拉德
- 积分
- 11
- 怒气
- 1
- 声望
- 4
- 战力
- 0
|
动态旋转并不是ani写死的旋转,而是,他能根据不同的坐标能有不同的旋转角度。诸如
疾风骤雨,男冰洁的冰枪,瞎子的雷云
等等要使用动态旋转。这个直接可以在冰魄弓里抄到写法
如果是使用了accel写法的移动,他有很明确的开始坐标和最后结束坐标的概念,所以可以引用
编写好的函数,将开始坐标和最后坐标写入参数可获得旋转的参数然后
旋转
- function getRorateAngleByCurrentPos(obj,x1,y1,z1,x2,y2,z2)
- {
- if(!obj) return;
- local X = x1;
- local Y = y1;
- local Z = z1;
- local posX = x2;
- local posY = y2;
- local posZ = z2;
- local offset = posX - X;
- local distance = sq_GetDistance( X, Y - Z, posX, posY - posZ, true);
- local w = posX - X;
- if(w < 0) w = -w;
- local h = (posY - posZ) - (Y - Z);
- local width = sq_Abs(posX - X);
- local angle = sq_Atan2( h.tofloat(), width.tofloat());
- {
- angle = -angle;
- }
- local nRevision = distance;
- local cos = nRevision.tofloat() * sq_Cos(angle);
- local sin = nRevision.tofloat() * sq_Sin(angle);
- local nX = sq_Abs( cos.tointeger() );
- local nY = sq_Abs( sin.tointeger() );
- return angle;
- }
复制代码
函数(旋转)
这样就能完成效果
但是对于只有开始坐标,根本不知道最后坐标的,典型的ptl移动,破冰飞刃,
做法是,在接收数据那里存储一下开始坐标。而后在proc里,当特效运行超过了50毫秒后,取得坐标
,和存储的开始坐标进行运算,得出旋转坐标然后再设置,但是这个函数的旋转,他是有朝向问题的。
而破冰飞刃释放后所有的朝向都是玩家朝向(往玩家后方射击但是朝向还是玩家朝向,所以会导致,
明明往后射,结果旋转却是往前的窘况,所以比对x轴坐标,使其在旋转180度为反向。)
而后是男法的雷光链写法,用于了瞎子天雷波动剑
然而这个写法会导致当两个被链接的目标距离过远时,链子拉的老长的问题的。
所以在后期也是考虑要舍弃的写法
(玩家和怪物的链子、怪物与怪物之间的链子,会很明显的发现不一样)
而目前用于的,我发现的写法,是
一个ani旋转到对应的坐标,然后只改变ani的x大小,不要改变y轴大小,用于实现了怪物的线性警示条
和,剑鬼的一个技能效果,目前写法也尝试在逐渐用于其他地方
(瞬移至剑鬼替身身边的效果)
还有就是关于尾巴、拖尾(tail)的写法想法,目前也在逐步做尝试。
这类写法目前的思路可能就算贪吃蛇写法
因为accel写法的移动效果,很容易确定过去的路程
写法大致是,假定5个尾巴的临时特效,然后最主体获得10毫秒之前的坐标,和自身坐标
两个坐标为运算进行旋转而后第一个尾巴设置10毫秒之前的坐标。(获得n毫秒之前的坐标,均以主体为主)
第二个尾巴,10毫秒之前的坐标和20毫秒之前的坐标,进行旋转,连线,设置20毫秒之前的坐标,依次类推
第三个尾巴,20毫秒之前的坐标和30毫秒之前的坐标,进行旋转,连线,设置30毫秒之前的坐标。即可
当然,这个10毫秒越短,就越平滑。越长,就越拖尾越长
这些都是很细节写法,不过,细节写法也挺重要的,不然技能看起来可能从某方面会很尬
|
|