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

 找回密码
 点一下
查看: 3027|回复: 0

模拟投射物轨迹——函数粗略版

  [复制链接]
发表于 2009-9-6 08:06:34 | 显示全部楼层 |阅读模式
模拟投射物轨迹——函数粗略版
    引用
    下定决心减少来GA的时间了……
    而且是大量的减少……
    恩……
    其实很早就有这样的打算了……
    不过我这人一向是重视承诺的……
    至少自己该做的……
    绝对会做完……
好吧……

这个函数本来时被小血逼着为位面消隐做的东西……
因为自己不会VJ,所以只是写了个简单的函数,用于测试高度公式以及效果,连排泄都没有做……
而且我也根本没有想将其发上来,至少在开始写这个帖子之前没有……
算了,还是不多说了……

演示下载: aim.w3x (22 K) 下载次数:2
复制代码 jass


以上是最简单的代码,GC版,无排泄,无变量声明(声明看最后的演示吧)。反正诸位也许会用的GAer大约也能自己改成完好的。
其中:
复制代码 jass

  • function Getb takes real H0,real H1,real L,real K returns real
  • //b
  • return 2*((K*L-H0)+SquareRoot((K*L-H0)*(K*L-H1)))*10000/L
  • endfunction
  • function Geta takes real H0,real H1,real L,real K returns real
  • //a
  • local real b = Getb(H0,H1,L,K)
  • return b*b/40000/(H0-K*L)
  • endfunction

这两个函数的返回值是投射物曲线的抛物线方程Y=aX2+bX+c中的a、b参数,而参数c是H0,也就是投射物的初始高度。

之后的三个函数是具体模拟投射物效果的函数:
GetAim是记录各种参数,然后开始曲线方案1的计时器。具体需要绑定的参数有:
Aim,(目标,函数中保存的是Handle),
Projectile,(投射物单位,在函数里创建的,类型通过 GetAim 函数的参数获得,演示里也是用Handle值传递的)
VX,(水平方向的速度,就是每间隔时间内投射物的移动距离,其值是投射速率这个系数乘以移动间隔时间)
b,(Getb获得的,  b=2*[(K*L-H0)+√((H0-K*L)*(H1-K*L)) ] 其中√代表平方根)
√a,(Geta获得的,a=b2/4/(H0-K*L)  ,b用Getb获得)

X,(目标X轴坐标,用于判断目标是否移动)
Y,(同X,不过是Y轴的)
H0,(投射物的初始高度)
T,(执行次数,用于计算的,每次循环要+1)

因为不是成品,所以还是仔细说明下。
特别要提到的是
我并没有让投射物创建在攻击单位头上,而是向着目标移动一个移动间隔(VX),这是因为感觉这样效果真实。
MoveProjectileA,MoveProjectileB是两个投射物运行方式A是目标不移动的轨迹,B是移动后的,具体请自己看真实投射物曲线吧(下载 投射物.w3x (18 K) 下载次数:1 )。 调用MoveProjectileB时,你只要将VX,Aim和Projectile传递过去即可。

MoveProjectileB的调用在MoveProjectileA中(函数上面有注释),无论哪种方式,当命中目标(判断目标和投射物之间的距离小于VX)后,需要运行其他函数,请插入函数中相关注释的部分
演示采用的方法是不考虑地面的,也就是未曾考虑地面不平的问题。,如果诸位需要考虑,可以将H0和H1(目标高度)都加上对应点的GetLocationZ。设置投射物高度时要减去 GetLocationZ。另外还有判断计算出来的高度是否高于地面,如果高于地面,请将投射物隐藏或替换,取消投射物模型,这样更真实些。(正常地图不必考虑这些)

复制代码 jass


中调用即可。

关于目标不移动时投射物的曲线的方程,
还有个计算用的解释图:


  


如果有谁要完整能用的函数……
找小血要吧……
嘿嘿……
    引用
    函数是未完整的……
    感觉还是很对不起大家……
    恩恩……
    于是躲起来……
    也许会偶尔上来看看的……

评分

参与人数 1威望 +6 收起 理由
alexries + 6

查看全部评分

您需要登录后才可以回帖 登录 | 点一下

本版积分规则

Archiver|移动端|小黑屋|地精研究院

GMT+8, 2024-3-29 21:22 , Processed in 0.209551 second(s), 22 queries .

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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