`
cenphoenix
  • 浏览: 160540 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

2D飞行射击中简单的跟踪算法

阅读更多

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

在飞行射击游戏中,恐怕没有一个游戏不用到跟踪算法的。比如在玩街机的时候,是不是经常挂于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);

这样,每次子弹移动之前做一下判断,重新计算角度,怎么样?“跟踪弹”出来了吧?
如果您在阅读的过程中有不理解的地方。请Mail me: game-diy@163.com
My OICQ is: 30784290
HomePage: http://kylinx.yeah.net

 

  • 大小: 3.2 KB
分享到:
评论

相关推荐

    cocos2d 飞行射击游戏

    在本文中,我们将深入探讨如何使用cocos2d框架创建一款飞行射击游戏,特别是针对iOS平台。cocos2d是一款广泛应用于2D游戏开发的开源框架,它为开发者提供了丰富的功能,使得游戏制作过程变得更加简单高效。让我们...

    岳年香2D飞行射击本科毕业设计

    《岳年香2D飞行射击本科毕业设计》是一款基于面向对象编程技术的2D游戏,旨在展示学生在游戏开发领域的专业技能与创新思维。在这个项目中,开发者运用了丰富的计算机科学理论,特别是针对2D游戏设计的核心技术,如...

    Android 飞行射击类游戏原理实现

    对于飞行射击类游戏,由于其对2D或2.5D图形的需求,Cocos2d-x可能更为合适,因为它专注于2D游戏开发,且有丰富的文档和社区支持。 2. **图形渲染**:在Android游戏中,图形渲染是核心部分。Cocos2d-x提供了基于...

    HTML5 Canvas 2D竖版飞行射击游戏实例

    在HTML5 Canvas 2D竖版飞行射击游戏中,关键的技术点主要包括以下几个方面: 1. **绘图基础**:使用`canvas.getContext('2d')`获取2D渲染上下文,这是在Canvas上绘制的基础。然后,通过调用`beginPath()`、`moveTo...

    简单飞行射击游戏模型

    【简单飞行射击游戏模型】是一种基于计算机编程技术开发的电子游戏,主要涵盖了游戏设计、图形渲染、物理模拟、用户交互等多个IT领域的知识点。这类游戏通常包括飞机操控、敌人AI(人工智能)行为、子弹轨迹计算以及...

    飞行射击游戏

    《飞行射击游戏》是一款利用Cocos2d-x引擎开发的简单飞行射击类游戏。Cocos2d-x是一款广泛应用于移动平台的游戏开发框架,它支持多平台运行,包括iOS、Android以及Windows等,采用C++语言编写,同时也提供了 Lua 和 ...

    安卓Android源码——(飞行射击游戏实战).zip

    对于一个飞行射击游戏,可能需要自定义或使用现成的游戏框架,如Unity3D或Cocos2d-x。这些引擎提供了场景管理、对象动画、碰撞检测等功能,使得开发者能够专注于游戏逻辑,而不是底层实现。 其次,图形渲染在飞行...

    手机飞行射击游戏 JAVA

    同时,碰撞检测是飞行射击游戏中不可或缺的部分,可以使用轴对齐边界框(AABB)或其他碰撞检测算法。 四、游戏逻辑 1. 敌人生成:编写算法随机生成敌机,可以设定不同类型的敌机有不同的行为模式。 2. 子弹与碰撞...

    Unity导弹追踪算法演示

    在Unity3D中,导弹追踪算法是游戏开发中的一个重要组成部分,尤其在军事模拟、飞行射击类游戏中广泛应用。这个"Unity导弹追踪算法演示"项目提供了一个直观的实例,帮助开发者理解和实现这一功能。以下是对该演示项目...

    android 飞行射击游戏 源码+开发文档

    3. **物理引擎**:飞行射击游戏中,物体的移动、碰撞检测等都需要物理引擎的支持,如Box2D库可以帮助实现这些功能。 4. **网络同步**:如果是多人在线的飞行射击游戏,还需要处理网络同步问题,确保玩家间的游戏...

    android 飞行射击类游戏源代码

    【Android飞行射击类游戏源代码】是针对移动平台开发的一款基于Android系统的游戏程序,它集成了许多编程技术和设计模式,为玩家提供了刺激的空战体验。这类游戏通常包含丰富的图形界面、动态音效以及复杂的物理模拟...

    Java飞行射击类游戏

    【Java飞行射击类游戏】项目是一个专为学习者设计的编程实践案例,它采用Java语言实现了一款基础的飞行射击游戏。在这个项目中,开发者可以深入理解如何在Java环境中构建游戏逻辑,处理图形渲染,以及实现基本的游戏...

    作品:《简单飞行射击模型》 .rar

    《简单飞行射击模型》是一个可能包含游戏开发源代码、素材资源和相关文档的压缩包,旨在为学习者或开发者提供一个基础的飞行射击游戏的框架。这个模型可能涵盖了游戏编程的一些核心概念和技术,如游戏循环、物体碰撞...

    android飞行射击游戏

    4. **物理模拟**:虽然简单的飞行射击游戏可能不需要复杂的物理引擎,但基础的碰撞检测和重力模拟仍然重要。开发者可能需要自定义算法或使用第三方库(如Box2D)来实现。 5. **音频处理**:背景音乐和音效增强游戏...

    MFC飞行射击游戏(含全部源码)

    在飞行射击游戏中,我们可能需要创建一个主框架窗口类作为游戏的入口,视图类则用来处理游戏的显示和交互。首先,我们需要设置MFC项目的工程,选择Win32项目,并选择“应用程序向导”中的“单文档界面(SDI)”模板...

    飞行射击游戏源码分享下载

    1. **游戏引擎与框架**:尽管没有明确指出使用的是哪种游戏引擎或框架,但一般来说,制作这类2D飞行射击游戏,开发者可能会选择如Unity、Cocos2D、pygame等流行的游戏开发工具。这些工具提供了丰富的图形渲染、物理...

    飞行射击游戏 android

    对于飞行射击游戏,可能需要简单的物理模拟,例如重力和碰撞响应。Box2D是一个常用的2D物理引擎,可以轻松集成到LibGDX项目中。 8. **游戏状态管理**: 确保游戏在不同状态间平滑切换,如暂停、游戏结束和重新...

    cocos2d-x游戏实例-纵版射击游戏

    【cocos2d-x游戏实例-纵版射击游戏】是一个基于Cocos2d-x框架开发的垂直滚动射击游戏,这种类型的游戏通常被称为“飞行射击”或“弹幕射击”。Cocos2d-x是一个广泛使用的开源游戏开发框架,它支持多平台开发,包括...

    经典飞行射击游戏c++源码

    【标题】"经典飞行射击游戏c++源码"所涉及的知识点主要集中在C++编程语言以及游戏开发领域,特别是飞行射击类游戏的实现。C++是一种强类型、面向对象的编程语言,它提供了丰富的功能和高效性能,是开发游戏尤其是高...

    iOS飞行射击游戏源码

    在本资源中,我们拥有一个基于Swift编程语言开发的iOS飞行射击游戏的完整源码,该游戏可以在Xcode集成开发环境中进行编译和运行。这个项目对于那些希望深入理解iOS游戏开发,特别是对Swift和2D游戏编程感兴趣的...

Global site tag (gtag.js) - Google Analytics