请选择 进入手机版 | 继续访问电脑版

DNF阿拉德游戏论坛

 找回密码
 立即注册
查看: 3734|回复: 0

[PVF] 台服DNF关于技能nut动态旋转的一些思路写法探究

[复制链接]

签到天数: 1 天

[LV.1]无主之魂

2

主题

2

帖子

11

积分

初入阿拉德

Rank: 1

积分
11
怒气
1
声望
4
战力
0
发表于 2020-11-8 18:39:54 | 显示全部楼层 |阅读模式
动态旋转并不是ani写死的旋转,而是,他能根据不同的坐标能有不同的旋转角度。诸如
疾风骤雨,男冰洁的冰枪,瞎子的雷云
等等要使用动态旋转。这个直接可以在冰魄弓里抄到写法
083141tth6k41u064zz6xj.png

083141gdz3fddvf22dm4vm.png

083141cgyoyodcor9jysod.png

083142m19evzivy1iivv18.png



如果是使用了accel写法的移动,他有很明确的开始坐标和最后结束坐标的概念,所以可以引用
编写好的函数,将开始坐标和最后坐标写入参数可获得旋转的参数然后
旋转
  1. function getRorateAngleByCurrentPos(obj,x1,y1,z1,x2,y2,z2)
  2. {
  3. if(!obj) return;


  4. local X = x1;
  5. local Y = y1;
  6. local Z = z1;


  7. local posX = x2;
  8. local posY = y2;
  9. local posZ = z2;


  10. local offset = posX - X;


  11. local distance = sq_GetDistance( X, Y - Z, posX, posY - posZ, true);


  12. local w = posX - X;
  13. if(w < 0) w = -w;


  14. local h = (posY - posZ) - (Y - Z);
  15. local width = sq_Abs(posX - X);
  16. local angle = sq_Atan2( h.tofloat(), width.tofloat());


  17. {
  18. angle = -angle;
  19. }


  20. local nRevision = distance;


  21. local cos = nRevision.tofloat() * sq_Cos(angle);
  22. local sin = nRevision.tofloat() * sq_Sin(angle);


  23. local nX = sq_Abs( cos.tointeger() );
  24. local nY = sq_Abs( sin.tointeger() );


  25. return angle;


  26. }
复制代码

函数(旋转)
083251l39g4mthnk4txkpg.png

这样就能完成效果
但是对于只有开始坐标,根本不知道最后坐标的,典型的ptl移动,破冰飞刃,
做法是,在接收数据那里存储一下开始坐标。而后在proc里,当特效运行超过了50毫秒后,取得坐标
,和存储的开始坐标进行运算,得出旋转坐标然后再设置,但是这个函数的旋转,他是有朝向问题的。
而破冰飞刃释放后所有的朝向都是玩家朝向(往玩家后方射击但是朝向还是玩家朝向,所以会导致,
明明往后射,结果旋转却是往前的窘况,所以比对x轴坐标,使其在旋转180度为反向。)


而后是男法的雷光链写法,用于了瞎子天雷波动剑
083309veysvz9luhbx6bsb.png



然而这个写法会导致当两个被链接的目标距离过远时,链子拉的老长的问题的。
所以在后期也是考虑要舍弃的写法
083333bx554vdkk8z4lhs8.png



(玩家和怪物的链子、怪物与怪物之间的链子,会很明显的发现不一样)
而目前用于的,我发现的写法,是
一个ani旋转到对应的坐标,然后只改变ani的x大小,不要改变y轴大小,用于实现了怪物的线性警示条
083414pvnevvxl7blm7x1k.png



和,剑鬼的一个技能效果,目前写法也尝试在逐渐用于其他地方
(瞬移至剑鬼替身身边的效果)


083414artzmrrxr06jf7wg.png

083414wvcty48svnteytyw.png

083450hy82pb3n8z8525wn.png

还有就是关于尾巴、拖尾(tail)的写法想法,目前也在逐步做尝试。
083454dwngbj64uxw0lq6b.png


这类写法目前的思路可能就算贪吃蛇写法
因为accel写法的移动效果,很容易确定过去的路程
写法大致是,假定5个尾巴的临时特效,然后最主体获得10毫秒之前的坐标,和自身坐标
两个坐标为运算进行旋转而后第一个尾巴设置10毫秒之前的坐标。(获得n毫秒之前的坐标,均以主体为主)
第二个尾巴,10毫秒之前的坐标和20毫秒之前的坐标,进行旋转,连线,设置20毫秒之前的坐标,依次类推
第三个尾巴,20毫秒之前的坐标和30毫秒之前的坐标,进行旋转,连线,设置30毫秒之前的坐标。即可
当然,这个10毫秒越短,就越平滑。越长,就越拖尾越长


这些都是很细节写法,不过,细节写法也挺重要的,不然技能看起来可能从某方面会很尬
“邪恶如同灯光下的阴影,即使看不见也会存在。”——歌兰蒂斯
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|DNF阿拉德游戏论坛 ( 渝ICP备13007431号1 )

GMT+8, 2023-6-4 05:01 , Processed in 0.129993 second(s), 36 queries .

Powered by Discuz! X3.3 网站地图 Auther by 31& 地下城与勇士论坛 标签大全

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表