在飞行射击游戏中,恐怕没有一个游戏不用到跟踪算法的。比如在玩街机的时候,是不是经常挂于BOSS的"跟踪弹"? 这是怎样实现的呢?很简单,只要有高中的一点数学知识就行了! 首先回忆几个三角函数sin,cos,tan(tg),arctan(arctg) sin(x)对边/斜边。在1,2项限为正,3,4项限为负 cos(x)邻边/斜边。在1,4项限为正,2,3项限为负 tan(x)对边/邻边。在1,3项限为正,2,4项限为负 考虑到游戏里面的坐标系如下所示: 假设敌人子弹的坐标为slug.x,slug.y,子弹的速度为slug.speed(全部是double型) 上面的三角形的斜边就代表子弹的速度,则子弹每次移动的时候座标的改变为: slug.x = slug.speed * cos(theta); slug.y = slug.speed * sin(theta); 在敌人子弹向你发射过来的时候,首先要计算子弹位置与你所在的位置所夹的角度theta 简单计算就是: double deltax = player.x - slug.x; // 注意,、是以主角位置为起点 在上图中表示就是x1-x0 double deltay = player.y - slug.y; // y1-y0 为了防止在相除的时候分母为0,做一个判断,使分母近为0,究竟是负的近还是正的近呢?这就需要比较子弹和你的Y坐标谁大谁小了。 if( deltax == 0 ) { if( player.y = slug.y ) // 子弹需要下移 deltax = 0.; else // 子弹需要上移 deltax = -0.; } 同理,对deltay作判断 if( deltay == 0 ) { if( player.x = slug.x ) // 子弹需要右移 deltay = 0.; else // 子弹需要左移 deltay = -0.; } 现在对角度所处的项限作判断 if( deltax0 deltay0 ) angle = atan(fabs(deltay/deltax)); // 第一项限 else if( deltax0 deltay0 ) angle = -atan(fabs(deltay/deltax)) // 第二项限 else if( deltax0 deltay0 ) angle = atan(fabs(deltay/deltax)) // 第三项限 else angle = 2-atan(fabs(deltay/deltax)) // 第四项限 其中取3.(呵呵,别忘记近哦) 好了,现在已经得到正确的方向了,可以计算子弹坐标了! slug.x = slug.speed * cos(theta); slug.y = slug.speed * sin(theta); 这样,每次子弹移动之前做一下判断,重新计算角度,怎么样?"跟踪弹"出来了吧?
推荐整理分享游戏中跟踪弹算法(跟踪子弹),希望有所帮助,仅作参考,欢迎阅读内容。
文章相关热门搜索词:一个可以有跟踪子弹的游戏,跟踪子弹,带有跟踪导弹的游戏有哪些,跟踪弹怎么画,有跟踪弹吗,带有跟踪导弹的游戏有哪些,一个可以有跟踪子弹的游戏,带有跟踪导弹的游戏有哪些,内容如对您有帮助,希望把文章链接给更多的朋友!
Unity3D游戏开发之Unity3D动画与Mecanim动画系统 Mecanim是Unity新增的动画系统,其功能强大而灵活,让人类和非人类角色栩栩如生。Mecanim的重定向极大的提供了工作效率,而且占用极少CPU周期。使用从U
教你怎样用unity3d发布一个Android的apk文件.绝对精细 1.首先呢。就是必要的一些软件工具了。不用说unity3d这个是必要的(觉得这是不是废话)。然后就是。我们的一些运行的环境了。Java(jdk).Android模拟器(
Unity3D游戏开发之使用场景Ⅰ:建立类型映射 总的来看,Unity的使用场景主要有以下几个:建立类型映射用于单例模式用于依赖注入接下来,将逐一介绍各使用场景。在创建对象时,毫无疑问,类型