让子弹多飞一会儿——谈谈游戏中的弹道(转)

电子游戏/电脑游戏发展已经有几十年了。很多老玩家们都是小时候从街机厅开始玩游戏的。转眼到了2010年,今天已经是网络游戏的天下。街机厅一个个不是关了门,就是变成了暗地里的赌博厅,网吧则在城市中遍地生根发芽。如今走进网吧,不是WOW就是天DNF。人人戴着耳机,专注屏幕,没有了街机厅的那种喧闹,那种1元钱在街机厅混一个下午,一个牌子把《皎皎皎》复关6遍的日子已经一去不复返了。当然,时代在发展,网游从某种角度来说战胜了单机,也是因为有他得天独厚的优势。在网游中,社交被大大强化了。人们可以在游戏中认识很多朋友,共同游戏,共同战斗。但是,为什么网游的战斗就是找不到单机的那种感觉呢?笔者斗胆在这里提出一个观点:网游在强化社交的同时,也简化了战斗。

  笔者说的网游简化战斗,主要指现在的网游,都是不计算弹道过程的。

  笔者向不少游戏开发者请教过这个问题,经笔者总结,战斗的飞行道具(就是指打出去的火球之类)有四种方式。

第一种:不计算弹道过程,直接打选中的对象。根据命中和闪避加上随机函数来判断是否命中。

  目前绝大多数网游都是如此。比如征途天龙八部诛仙等都是如此。在这种模式下,你看到一个火球向你飞来,左右闪躲是没有用的,躲到石头后面也是没有用的,因为在火球发出来的时候,服务器已经决定了是否会命中,任何挣扎都是徒劳的。

有一个证据可以证明这点:有时候你会看到你打出去的火球拐弯了,打出了“香蕉球”。这是因为客户端火球飞出去的时候,服务器告诉客户端对方跑到边上去了,为了不至于明明看上去没有打到还要掉血,客户端就让火球拐弯了再打到对方。

  这类游戏都有一个特征:必须选中对方你才打到对方。因为你打的就是你选中的对象。

第二种:不计算弹道过程,但无需选中对方,鼠标指在哪个格子就打哪个格子。根据命中和闪避加上随机函数来判断是否命中。

  传奇就是这类游戏。玩过传奇的玩家都知道,如果很多人站在一起,会排得整整齐齐的。那就是因为其实地上有格子,每个格子中只能站一个人。传奇中,鼠标放在什么位置,火球就打那个位置了,火球飞行过程中有障碍物,也是可以穿透的。火球打出去的那一刹那,其实是不是打中,服务器已经计算好了,逃是逃不掉的。当你看到火球飞来,任何挣扎也都是徒劳的。

  肯定会有朋友说:不是这样的,传奇中躲闪是有用的。其实,那是你的错觉。有两个因素让你产生了这个错觉。

  一方面,传奇中移动的时候,闪避率会提高,所以对方在跑,你就比较难打中他了。这让人产生错觉:好像我闪开了。另一方面,是网络延迟在起作用。在你打对方所在的格子的时候,你看到对方在那个格子,其实由于网络延迟,他只是零点几秒之前在那个格子,实际上可能已经不在那里了。所以要想打中,需要判断对方可能往哪个方向跑,然后打提前量。

  总之,打格子这种设计,比第一种设计战术性更强一点,但是,比起真正的弹道还是差得很远。

第三种:计算弹道,但不计算弹道过程。弹道瞬间计算完成,在这条射线上对手被打中。

  几乎所有的第一人称射击游戏都是如此。比如CS、穿越火线。当然,热兵器用这种设计也非常合理。看见子弹飞来还能躲的,不是超级英雄,就是周润发了。所以这类游戏,你是看不见子弹飞的。但是弹道还是有的,中间有障碍还是能挡子弹的。

总之,这种设计基本上只适合热兵器战斗的游戏。

  第四种:计算完整的弹道过程。

  在这种设计的游戏中,当你看到在火球你飞来的时候,你还有机会躲开,甚至用障碍(比如血多的队友)挡住火球。这种感觉真实多了,并且战术性也强多了。

  举例来说,在第一、第二种设计中,群PK的时候让战士冲在前面毫无意义。因为敌人的火球可以无视前面的战士,飞过去直接把后面的法师干掉。而计算完整弹道过程就不同了,火球飞来,完全可以被前面的战士挡住,不打掉战士就打不到战士身后的其他人(当然你绕到侧面攻击也行)。这样后面的法师才能寻找机会攻击,后面的牧师才能在战士的保护下加血。在这种设计下,才真正有“阵型”的概念。

  有哪些游戏是完整计算弹道的呢?其实非常多,很多单机游戏都是计算弹道的。比如几乎所有的飞行射击游戏,如《皎皎皎》。大多数动作射击游戏也是如此,比如经典的《魂斗罗》。在即时战斗RPG领域,比如《暗黑破坏神》也是即时计算弹道的。甚至连下面这个叫《Pong》的游戏都是即时计算弹道的:

这是1972年的一个老掉牙的游戏机,这个游戏机只能玩这一个游戏。就是双方各控制一个短线来“打乒乓”。这可是72年的老游戏啊!我想问问现在的网游开发商们,你们羞愧吗?

  也有人说,这都是单机游戏,所以做弹道很容易,网游很难做,因为服务器计算不过来,网络延迟也影响很大。但是,十年前就上市的《暗黑破坏神2》给这种观点扇了一个响亮的耳光。当年我经常连接到《暗黑破坏神2》美服战网玩,在延迟达到300秒的情况下,练了n个99级号。难道国产服务器计算不过来,暴雪10年前的服务器就能计算过来?难道国内的网络延迟,比美服还大?显然这种观点是站不住脚的,唯一些解释只能是:不思进取。

07年,微软、诺基亚等大公司对iphone做出了惊人一致的错误的判断,认为如果有这么大的电容触摸屏,手机待机时间会很短,所以这种产品不可能出现。而苹果则有完全不同的态度,想方设法解决了这个问题,iphone一举占领市场,成为智能手机的王者。现在,微软们醒悟过来为时已晚。

  逆水行舟,不进则退。微软如此,国产游戏公司也是如此。在大量国外优秀产品围追堵截下,国产游戏还有什么资格固步自封呢?只有大胆尝试,大胆创新才有出路。当然,最近也有一些游戏对完整计算弹道做出了一些尝试,比如对《暗黑破坏神2》进行深度模仿的《倩女幽魂online》,部分技能就采用了完整计算弹道,比如游戏中的武海的烧饼就是看见还能躲的。虽然只是部分,虽然只是尝试,但至少让笔者看到了一点国产游戏的希望。至少还有人在创新,至少还有人在努力。

转载自:http://newgame.duowan.com/1101/158149197511_2.html

时间: 2024-10-12 23:29:47

让子弹多飞一会儿——谈谈游戏中的弹道(转)的相关文章

游戏的物理和数学:Unity中的弹道和移动目标提前量计算

下载地址:http://yunpan.cn/cK6pCrpdhfbTd  提取码 5472 弹道计算是游戏里常见的问题,其中关于击中移动目标的自动计算提前量的话题,看似简单,其实还是挺复杂的数学.网上这方面的资料还真不多,而且都是写的含含糊糊.抽空总结一下自己的方法. 讨论的前提是,假设目标是在3D空间里以匀速直线方式运动. 1.直线弹道在不考虑重力和空气阻力影响的情况下,子弹的弹道呈直线运动.这种情况下,其实是个纯平面几何空间的问题,不需要微积分和线代知识.分析的情况如下图:        

漫谈游戏中的人工智能

写在前面   今天我们来谈一下游戏中的人工智能.当然,内容可能不仅仅限于游戏人工智能,还会扩展一些其他的话题. 游戏中的人工智能,其实还是算是游戏开发中有点挑战性的模块,说简单点呢,是状态机,说复杂点呢,是可以帮你打开新世界大门的一把钥匙.有时候看到知乎上一些可能还是前公司同事的同学的一些话,感觉还是挺哭笑不得的,比如这篇:http://zhi.hu/qu1h,吹捧机器学习这种玄学,对游戏开发嗤之以鼻.我只能说,技术不到家.Vision不够,这些想通过换工作可培养不来. 这篇文章其实我挺早就想写

游戏中的弹道学手册(转)

[1]直线单体必中飞弹 代表单位:<帝国时代1>的弓箭手,<海岛奇兵>的步兵 直线飞行,只会击中被攻击的单位,命中率100%.看起来飞弹会穿过一些单位,但其实只会击中被锁定为攻击目标的单位.如果飞弹在飞行的过程中目标单位已经被摧毁,则飞弹会继续飞行一段距离之后消失. 虽然理论上来说弓箭手的弹道应该是抛物线,但<帝国时代1>中的弓箭手是直线射击的,我们就不要对老游戏太苛求啦! [2]直线单体真实碰撞飞弹 代表单位:<合金弹头>的小手cc枪.H枪,绝大多数射击游

让AutoMapper在你的项目里飞一会儿(转)

出处:http://www.cnblogs.com/WeiGe/p/3835523.html 先说说DTO DTO是个什么东东? DTO(Data Transfer Object)就是数据传输对象,说白了就是一个对象,只不过里边全是数据而已. 为什么要用DTO? 1.DTO更注重数据,对领域对象进行合理封装,从而不会将领域对象的行为过分暴露给表现层 2.DTO是面向UI的需求而设计的,而领域模型是面向业务而设计的.因此DTO更适合于和表现层的交互,通过DTO我们实现了表现层与领域Model之间的

飞行游戏中的碰撞算法-边界框碰撞检测

参考源地址http://xxxxxfsadf.iteye.com/blog/540669 在飞行射击游戏中,我们的飞机大多都是三角形的,我们可以用三角形作近似的边界框.现在我们假设飞机是一个正三角形(或等要三角形,我想如果谁把飞机设计成左右不对称的怪物,那他的审美观一定有问题),我的飞机是正着的.向上飞的三角形,敌人的飞机是倒着的.向下飞的三角形,且飞机不会旋转(大部分游戏中都是这样的).我们可以这样定义飞机:中心点O(Xo,Yo),三个顶点P0(X0,Y0).P1(X1,Y1).P2(X2,Y

数据结构在游戏中的简单应用

         在游戏的编写中,不可避免的出现很多应用数据结构的地方,有些简单的游戏,只是由几个数据结构的组合,所以说,数据结构在游戏编程中扮演着很重要的角色. 本文主要讲述数据结构在游戏中的应用,其中包括对链表.顺序表.栈.队列.二叉树及图的介绍.读者在阅读本文以前,应对数据结构有所了解,并且熟悉C/C++语言的各种功用.好了,现在我们由链表开始吧! 1.链表 在这一节中,我们将通过一个类似雷电的飞机射击游戏来讲解链表在游戏中的应用.在飞机游戏中,链表主要应用在发弹模块上.首先,飞机的子弹是

游戏中的三角学——Sprite Kit 和 Swift 教程(1)

原文链接 : Trigonometry for Games – Sprite Kit and Swift Tutorial: Part 1/2 原文作者 : Nick Lockwood 译文出自 : 开发技术前线 www.devtf.cn 译者 : kmyhy 更新 2015/04/20:升级至 Xcode 6.3 和 Swift 1.2 更新说明:这是我们广受欢迎的教程之一的第三个版本--第一个版本是 Cocos2D 的,由 Matthijs Hollemans 缩写,第二个版本由 Tony

游戏中的三角学——Sprite Kit 和 Swift 教程(2)

原文链接 : Trigonometry for Games – Sprite Kit and Swift Tutorial: Part 2/2 原文作者 : Nick Lockwood 译文出自 : 开发技术前线 www.devtf.cn 译者 : kmyhy 游戏编程中的三角学! 2015年4月20日 更新:更新到 Xcode 6.3 和 Swift 1.2. 更新说明:这是我们广受欢迎的教程之一的第三个版本--第一个版本是 Cocos2D 的,由 Matthijs Hollemans 缩写,

游戏中跟踪弹算法

欢迎来到unity学习.unity培训.unity企业培训教育专区,这里有很多Unity3D资源.Unity3D培训视频.Unity3D教程.Unity3D常见问题.Unity3D项目源码,[狗刨学习网]unity极致学院,致力于打造业内unity3d培训.学习第一品牌. 在飞行射击游戏中,恐怕没有一个游戏不用到跟踪算法的.比如在玩街机的时候,是不是经常挂于BOSS的"跟踪弹"? 这是怎样实现的呢?很简单,只要有高中的一点数学知识就行了! 首先回忆几个三角函数sin,cos,tan(t