恩。。。其实这个我早就给sulbon过了,不过他没用这些。。。:L :Q
1.平行接近法:
HistoryVectorX:=TF.FirstTargetPosX-Position.X //初始化 历史向量
HistoryVectorZ:=TF.FirstTargetPosZ-Position.Z
while(1)
CurrentVectorX:=TF.FirstTargetPosX-Position.X //获取当前目标-导弹向量
CurrentVectorZ:=TF.FirstTargetPosZ-Position.Z
TempVar:=CurrentVectorX*HistoryVectorZ-CurrentVectorZ*HistoryVectorX //叉乘判断历史向量与当前向量的方向关系
if(TempVar>0) //如果当前向量在历史向量的顺时针方向
Position.RotY:=Position.RotY+Weapon.MaxTurnRate
elseif(TempVar<0) //如果当前向量在历史向量的逆时针方向
Position.RotY:=Position.RotY-Weapon.MaxTurnRate
end
HistoryVectorX:=TF.FirstTargetPosX-Position.X //记录当前向量作为下一次循环的历史向量
HistoryVectorZ:=TF.FirstTargetPosZ-Position.Z
wait(1)
end
2.虚拟目标法。我自己想的一个比较简单的制导法,实际制导效果和前一种略有差异但差异不大。
while(1)
Dist:=Distance(Position.X,Position.Z,TF.FirstTargetPosX,TF.FirstTargetPosZ)
//计算导弹-目标距离
Time:=Dist/(Weapon.MaxSpeed) //假设目标不运动,导弹所需飞行时间
NewX:=TF.FirstTargetPosX+TF.FirstTargetSpeedX*Time
//根据上述时间目标将位于新的位置
NewZ:=TF.FirstTargetPosZ+TF.FirstTargetSpeedZ*Time
NewY:=TF.FirstTargetPosY+TF.FirstTargetSpeedY*Time
TempVar:=Position.SpeedX*(Position.Z-NewZ)-Position.SpeedZ*(Position.X-NewX)
//计算当前导弹指向与导弹-新位置向量的方向关系
if(TempVar>0) //如果新位置位于顺时针方向
Position.RotY:=Position.RotY+(Weapon.MaxTurnRate)
elseif(TempVar<0) //如果新位置位于逆时针方向
Position.RotY:=Position.RotY-(Weapon.MaxTurnRate)
end
wait(1)
end
第一种制导法其实可以引申出比例引导法,但是将会需要对具体角度进行计算,运算速度会大幅下降。有兴趣的话,可以尝试一下,估计效果会介于纯追踪法和平行接近法之间。
另:这些代码都没有对导弹的俯仰角进行计算,实际上的计算也类似XOZ平面的计算,只不过需要用X和Z的差值用勾股定理计算出XOZ平面上的长度,然后再和Y的差值相结合,使用叉乘法来判断导弹应该向上旋转还是向下旋转。
补充说明平行接近法原理:
如图所示:两条橙色虚线是互相平行的,导弹若按照橙色实线的方向飞行,就能准确命中目标。假若当前导弹飞行方向为上面一条蓝色实线的方向,那么在单位时间后,导弹-目标向量就会顺时针转动,就需要导弹作顺时针转动的调整;反之,若当前导弹飞行方向为下面一条蓝色实线的方向,那么在单位时间后,导弹-目标向量就会逆时针转动,就需要导弹作逆时针转动的调整;如果导弹-目标向量恰好不旋转,则不作任何调整。
通过图片可以发现,上述的这种调整方法会使深绿色虚线的圆上出现两个定向点,一个就是红色箭头所指的点,另一个则是上面一条橙色虚线的延长线与圆的交点(黑色点)。但是该黑色点是一个两侧都不会趋近的点(也就是说,除非导弹方向一开始就恰好在这个方向,否则都会逐渐远离该方向),而红色箭头所指的点则是趋近点,导弹若瞄准了除黑色点方向外的任何方向,都会逐渐调整到该方向。
[ 本帖最后由 honeyfox 于 2008-8-18 17:22 编辑 ]
HF啊,你放心修改,第一关我是不会加任何东西了。
到时候可能会直接把你的修改作为下个版本的默认配置。:handshake
加注释?还是单独列一个changelog?不过老实说,真的改起来,可能要同时涉及多个文件,到处都要加注释也很麻烦的。。。
sulbon
12
changelog… 如果不嫌麻烦的话,可以整理。
我建议是,大而且复杂的改动,写changelog;改几个参数,改一点贴图的色彩,完全不用。
sulbon
14
如果私自聊天的话,其它人可能插不进嘴。
但是如果放论坛,可以让大家都参与进来,发表自己的意见。说不定某一句不经意的话会产生一个好的点子。这也是这个区存在的目的之一。
声明:欢迎任何形式的留言。哪怕带90%的水分也欢迎。
LS睡得真早,难道是。。。早睡多产*吗?
凌晨1点前例行检查一下该区。。。嗯。。。
xpoy0
17
武器弹道和武器效果希望希望弱化这些的表现形式,再注意渐变…
如此则完美兮
sulbon
19
他的意思似乎是,弱化内部运算,强化表现效果。:lol :lol 猜测一下…
:L 啥叫强化表现效果?如果真想要强化效果。。。我觉得sulbon有必要把那个smoke的动画作的多一些,后面几帧的烟雾要越来越淡但是越来越大,这样效果可能好些。。。不过:Q 那个深度缓冲bug。。。