导弹制导脚本

恩。。。其实这个我早就给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 编辑 ]

:L :L :L

:lol :lol
纯支持…
关卡的事情抱歉了

HF啊,你放心修改,第一关我是不会加任何东西了。

到时候可能会直接把你的修改作为下个版本的默认配置。:handshake

当然,有几个原则:

1,保证好玩,好看。
2,中等配置不会卡帧。

噢对了

最好能在你修改的地方加注释说明一下。

加注释?还是单独列一个changelog?不过老实说,真的改起来,可能要同时涉及多个文件,到处都要加注释也很麻烦的。。。

changelog… 如果不嫌麻烦的话,可以整理。

我建议是,大而且复杂的改动,写changelog;改几个参数,改一点贴图的色彩,完全不用。

LS,LSS把聊天放论坛了.

如果私自聊天的话,其它人可能插不进嘴。

但是如果放论坛,可以让大家都参与进来,发表自己的意见。说不定某一句不经意的话会产生一个好的点子。这也是这个区存在的目的之一。

声明:欢迎任何形式的留言。哪怕带90%的水分也欢迎。

睡觉了,困死了
:lol

:stuck_out_tongue_winking_eye: LS睡得真早,难道是。。。早睡多产*吗? :stuck_out_tongue_winking_eye:
凌晨1点前例行检查一下该区。。。嗯。。。

武器弹道和武器效果希望希望弱化这些的表现形式,再注意渐变…
如此则完美兮

:L 我基本上没听懂LS说的啥意思。。。

他的意思似乎是,弱化内部运算,强化表现效果。:lol :lol 猜测一下…

:L 啥叫强化表现效果?如果真想要强化效果。。。我觉得sulbon有必要把那个smoke的动画作的多一些,后面几帧的烟雾要越来越淡但是越来越大,这样效果可能好些。。。不过:Q 那个深度缓冲bug。。。