`

子弹跟踪算法1

阅读更多
首先,本文讨论的是很简单的算法。高手莫入。

在飞行射击游戏中,恐怕没有一个游戏不用到跟踪算法的。比如在玩街机的时候,是不是经常挂于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.0000001;
   
else                                 // 子弹需要上移
        deltax = -0.0000001;
}


同理,对deltay作判断

if( deltay == 0 )
{
   
if( player.x >= slug.x )             // 子弹需要右移
        deltay = 0.0000001;
   
else                                 // 子弹需要左移
        deltay = -0.0000001;
}


现在对角度所处的项限作判断

if( deltax>0 && deltay>0 )
   
angle = atan(fabs(deltay/deltax));           // 第一项限

else if( deltax<0 && deltay<0 )
   
angle = π-atan(fabs(deltay/deltax))          // 第二项限

else if( deltax<0 && deltay<0 )                    
   
angle = π+atan(fabs(deltay/deltax))          // 第三项限

else
   
angle = 2π-atan(fabs(deltay/deltax))         // 第四项限

其中π取
3.1415926…………(呵呵,别忘记近似哦)
好了,现在已经得到正确的方向了,可以计算子弹坐标了!

slug.x += slug.speed * cos(theta);
slug.y += slug.speed * sin(theta);


这样,每次子弹移动之前做一下判断,重新计算角度,怎么样?“跟踪弹”出来了吧?

分享到:
评论

相关推荐

    游戏中跟踪弹的算法2

    游戏中的跟踪弹算法是射击类游戏中的核心机制之一,它使得子弹能够自动追踪目标进行攻击。这个算法基于基本的几何和三角函数,如正弦、余弦和反正切,来计算子弹应该移动的方向。以下是对这个算法的详细解析: 首先...

    Unity导弹追踪算法演示

    1. **目标检测**:导弹首先需要锁定目标,这通常通过碰撞检测或者射线投射实现,确保导弹能够识别和跟踪正确的目标。 2. **目标运动分析**:获取目标的速度和位置信息,根据这些信息预测未来的运动轨迹。 3. **...

    基于粒子群优化算法的子母弹最佳抛撒半径选择.pdf

    粒子群优化算法中,每一个粒子代表问题空间中的一个潜在解,粒子通过跟踪个体经验最优解以及群体经验最优解来更新自己的位置和速度,从而逐步逼近问题的最优解。在本研究中,粒子群优化算法被用来优化子母弹的抛撒...

    躲避子弹_躲避子弹游戏_

    在编程实现中,我们可以用计时器来跟踪游戏时间,并根据此来评估玩家的生存能力和游戏难度等级。例如,游戏可以设置多个关卡,每个关卡的子弹数量和速度会随时间递增,增加挑战性。 在技术实现上,"躲避子弹"游戏...

    基于字节跳动推荐算法的大数据研究.pdf

    数据结构与算法的关系类似于子弹与枪的关系,大数据算法如同枪支,能够精准发射大数据“子弹”到目标位置。字节跳动的推荐算法能够使内容创作者和用户之间实现更加精准的匹配,大大提高了用户体验,同时为企业带来了...

    feiji.rar_flash 游戏_子弹

    为了增加游戏趣味性,还可以引入不同的子弹类型,如散射弹、跟踪弹等,通过改变子弹的运动逻辑来实现。此外,子弹与敌人之间的碰撞检测也是子弹系统的关键部分,可以使用矩形碰撞或精确像素碰撞算法来判断。一旦检测...

    UNITY自动追踪导弹源码

    1. `Unity.PackageManagerUI.Editor.csproj` 和其他以 `.Editor.csproj` 结尾的文件,它们是Unity编辑器扩展的一部分,可能包含了自定义的编辑器界面或工具。 2. `Unity.TextMeshPro.Editor.csproj` 和 `Unity....

    J2ME飞机游戏之跟踪弹

    6. **跟踪弹算法**:跟踪弹的精髓在于它的追踪能力。实现这一特性通常需要一种寻路算法,如Bresenham's Line Algorithm,用于计算从发射点到目标点的直线路径。在实时游戏中,需要不断更新跟踪弹的位置,使其始终...

    易语言导弹跟踪-易语言

    总的来说,【易语言导弹跟踪】项目为学习者提供了实践易语言和游戏编程的良好平台,不仅可以提升编程技巧,也能深入了解导弹跟踪算法的设计与实现。通过深入研究源代码,我们可以学习到更多关于游戏开发和易语言编程...

    Java实现飞机大战

    1. **Java基础语法**:Java是一种面向对象的编程语言,它的语法严谨,易于学习。在飞机大战项目中,我们首先需要掌握类、对象、方法等基本概念。例如,飞机、子弹、敌机都可以抽象为类,每个类都有其特定的行为和...

    java雷电源码

    跟踪算法是游戏中常见的一种机制,它使得敌机或导弹能够自动追踪玩家的飞机。这个算法的核心在于计算目标与追踪者之间的相对位置,并据此调整追踪者的移动方向。在Java中,这可能涉及到二维坐标系统、向量运算以及...

    c++1400行代码实现的控制台坦克大战(麻雀虽小,五脏俱全)

    1.坦克类,子弹类,每个类维护一张地图 * 关于坦克:地图中只保存当前坦克不能过的地方(墙、河流) * 关于子弹:地图中只保存子弹能撞到的东西(不在草地里的坦克,子弹,墙) * 游戏对象:地图中只保存障碍物 2. ...

    Tank大战 java

    开发者需要编写代码来跟踪子弹的位置,判断其是否击中目标或离开屏幕,以及处理碰撞后的效果,如坦克的损伤或死亡。 坦克的转向和移动涉及到坐标系统的理解和应用。开发者需要设计一套坐标系统,以便根据键盘输入...

    js原生飞机大战源码

    6. AI设计:对于敌机,可能还需要实现简单的AI算法,让它们有一定的自主行动能力,如随机飞行路径或者对玩家飞机的跟踪。 7. 性能优化:由于游戏需要频繁地更新和绘制,性能优化至关重要。这可能涉及到减少不必要的...

    关于飞机射击类游戏的设计原理.docx

    1. **DirectX编程**:在本文档中,作者提到使用DirectX进行游戏开发。DirectX是一组应用程序接口(API),主要用于多媒体应用,尤其是游戏开发,它包含了图形渲染、音频处理等多个组件。学习并熟练运用DirectDraw...

    经典游戏坦克大战代码

    4. 子弹发射:当玩家按下射击键时,程序需要生成一颗子弹,并跟踪其在地图上的运动。子弹的运动轨迹、速度以及碰撞检测都是关键部分。在代码中,我们会看到如何创建子弹对象,以及如何更新它们的位置直到它们与障碍...

    坦克大战游戏(java).zip

    1. **面向对象编程(OOP)**:Java是面向对象的语言,游戏中的每个实体,如坦克、子弹和地图,都可以被抽象为类。每个类都有其特定的属性(如坦克的位置、速度,子弹的发射方向等)和方法(如坦克的移动、射击,地图...

    第10章人工智能与游戏23.pptx

    例如,怪兽在RPG游戏中追逐玩家,或NPC战机在飞行游戏中遵循预定路线并规避子弹。漫游AI通常根据角色位置调整速度或方向,有时也会引入随机因素。 - 行为AI:用于控制NPC对玩家角色的追踪和反应。它可以结合多种...

    使用Java开发的飞机大战.zip

    1. **Java编程**:Java是一种广泛使用的面向对象的编程语言,具有跨平台性、安全性以及高性能等优点。在这个项目中,Java被用来编写游戏的主要逻辑和界面。 2. **用户飞机的子弹发射**:在游戏开发中,通常会使用...

    一个C#写的射击类游戏源代码。

    4. 游戏对象的状态管理:如何跟踪每个对象(如玩家、敌人、子弹)的状态,并根据状态进行行为更新。 5. 用户输入处理:如何捕获键盘和鼠标事件,将其转化为游戏中的动作。 6. 碰撞检测算法:了解简单的矩形碰撞检测...

Global site tag (gtag.js) - Google Analytics