如何在多人游戏中实现“子弹时间”?


29

我以前从未见过这样的功能,但是它应该提供一个有趣的游戏机会。

是的,在多人/实时环境(想象中的FPS)中,如何实现慢动作/子弹时间效果?

对于目前正在慢动作的玩家来说,这是一种幻想。因此,每个人都看到他“实时”,但他看到一切都变慢了。

更新资料

旁注:请记住,FPS游戏必须保持平衡才能使其有趣。因此,是的,此子弹时间功能必须牢固,在不影响其他玩家的情况下,给“玩家”带来一点好处。

另外,两个玩家有可能同时激活其子弹时间。

此外:

无论将来如何,我都将在将来实现。并且,想法是为所有这些构建一个全新的游戏引擎。如果这提供了新的选择,那么我对听取这些想法会更感兴趣。

同时,在这里,我们也与我的团队一起考虑这一点,当我们的理论将被拟定时,我将在这里与大家分享。

这有可能吗?因此,已经回答了“这是否有可能”的问题,现在是时候找到最佳解决方案了。

我会一直保持“答案”,直到出现特别出色的东西,例如具有类似于伪代码的原型理论为止。

物理学家和哲学家怎么说:

链接供您使用,因为主题已关闭。

https://physics.stackexchange.com/questions/17118/time-traveling-and-time-dilation-within-a-multiplayer-videogame

https://philosophy.stackexchange.com/questions/1704/seeing-everything-in-slow-motion-but-being-real-time

我在物理站点上写问题时想到的条件(已复制):

  1. 播放器在慢动作的影响下具有优势,可以进行更精确的动作(射击,移动等),这是因为以慢得多的速度观看所有内容。
  2. 他的行为应实时影响其他玩家。
  3. 看着我们受影响的玩家的玩家没有任何区别,只是他们可以体验到他所做的动作(例如,玩家被射击/影响躲避了火箭)。
  4. 当玩家摆脱这种影响时,他只是继续以平常的速度前进。(如果这不可能,那么我想他将不得不受苦,直到时间恢复同步)

关于子弹时间(慢动作)的参考:

可悲的是,大多数实现仅是单人游戏

http://www.gamesradar.com/a-videogame-history-of-bullet-time/


3
这已经在MMORPG The Matrix Online中成功完成。与对手进行“互锁”战斗时,您在与对手战斗时经历了子弹时间。PvE和PvP对手都这样做。Interlock之外的所有人都看到了“实时速度”。因为我没有专门的知识或知识来解释他们是如何做的,所以发表评论而不是回答,我只是从玩家的角度知道发生了什么。
FallenAngelEyes

3
FEAR Combat中也存在此问题。在多人游戏中,有一种称为SloMoDeathmatch的游戏模式。如果我没有记错的话,这是一个免费游戏,所以如果你想尝试下载它,看看是否还有一些服务器。
alextsc 2011年

3
我不认为您正在等待伪代码会帮助您解决问题。一旦您想要的设计充分固化,代码就应该显而易见。
四分

1
另外,“无论采取什么措施”都是糟糕的设计哲学。似乎只有在证明(通过原型或另一个游戏中的有效示例)证明您打算使用的方法之后,才应该这样做。
四分

4
-1表示“我一直保持'答案',直到出现非常好的结果,例如具有接近工作伪代码的原型。” 别混蛋
特雷弗·鲍威尔

Answers:


22

之前已经做过。:)看看专家们,这是一款具有两个不同子弹时间加电功能的半条命MOD。

编辑以在下面包含zzzzbov的信息

从游戏玩法的角度来看,“专家”中子弹时间的工作方式是,玩家可以获得可以给予有限“子弹时间”的道具。使用时,播放器周围的气泡会降低其物理效果。

远处的玩家会以正常速度移动,但是气泡中的所有内容(子弹,玩家,爆炸)都会变慢。使用加电功能的玩家的移动速度会稍快一些,从而可以逃跑或使用特技躲避子弹。

陷入“子弹时间”泡沫中的其他任何人仍然具有能够看到将要发生的事情的优点,但是被抓住的玩家和子弹之间的相对速度差异保持不变,因此几乎没有反应能力。


@Tom IIRC是开源的,因此您应该能够看到他们是如何做到的。
Spencer Rathbun

嗯,Google搜索未返回任何有关源代码的结果。(以及有关专家:来源的大量信息也会显示)。有链接或其他东西吗?
joltmode 2011年

@Tom我以为它在他们的网站上,应该在维基百科文章中链接。如果不是这样,那么自从几年前他们改用HL2发动机以来,他们可能已将其淘汰。您可能需要向开发人员发送电子邮件以获取访问权限。当然,我也可以被洗净。
Spencer Rathbun

他们的网站也无法正常工作..
joltmode

5
我要添加相同的答案,直到找到这个答案。从游戏玩法的角度来看,“专家”中子弹时间的工作方式是,玩家可以获得可以给予有限“子弹时间”的道具。使用时,播放器周围的气泡会减慢其物理效果。远处的玩家会以正常速度移动,但是气泡中的所有内容(子弹,玩家,爆炸)都会变慢。使用加电功能的玩家的移动速度会快一些,从而可以逃跑或使用特技躲避子弹。
zzzzBov 2011年

12

我想不出在单人游戏中有子弹时间的游戏,以任何有意义的方式成功地将其转换为多人游戏。可能有一些人通过加快玩家使用它的速度来解决它,但这种方法失了本分。

存在子弹时间是因为您想让玩家感觉像个坏蛋。通过模拟更高级别的感知,您将为玩家带来看似不公平的优势。最终的结果是,玩家可以在做酷事的同时瞄准,例如从掩体中跳出来等等。如果您只是在启用子弹时间的情况下加快播放器的速度,则可以给他们更少的反应时间,这与您想要的相反。

在同步多人游戏环境中,对于由用户激活的“时间放慢”,实际上没有任何解决方案可以模拟在单人游戏环境中使用它的感觉。如果时间本身变慢了,那么每个人的看法都会上升。尤其是在通常会立即将鼠标对准目标的PC游戏中,每个人都会从较慢移动的目标中受益。

现在,如果您对此一无所知,我的建议是,与其让它成为玩家激活的功能,不如让它成为一种遭遇“状态”。就像约翰·吴(John Woo)的电影那样思考,在电影中,好人与坏人相处,当他们互相射击时,一切似乎都变慢了。因此,当“遇到”开始时,打开slo-mo即可获得一些有趣的效果。伙计们跳来跳去,空投的子弹击中的东西弹跳起来,还有所有这些东西。当然,这只会在一对一游戏中真正起作用。您不会像单人游戏那样获得子弹时间的单方面好处,但这可能是一种有趣的游戏体验。


1
仅通过减慢可以看到彼此的人的速度,然后将其放慢速度,就可以将其扩展到大于1:1。这样,其他所有人都会以正常的速度前进,直到他们陷入战斗。
乔治·达基特

您可以通过限制转弯速率来解决即时目标问题-真正的问题是,在正确的系统中,其他任何人都不应受到新参考系的影响;只能在子弹时间内看到玩家加速。
乔纳森·迪金森

不要放慢大家。冻结其他玩家,直到子弹时间几乎用完。您要计时,以使子弹时间结束时,时间线再次重新同步。
Martin Sojka

到目前为止,这是涵盖相关问题的唯一答案:您不会加快或减慢时间。您正在减慢模拟速度,以使玩家有更多的时间来做出反应并计划动作,如果实时进行,则会很快控制。为了从游戏玩法的角度进行这项工作,必须放慢所有参与的玩家(观看或参与动作)的速度,并且所有无关的玩家(不在附近见证速度降低的玩家)将以正常速度继续。如果您不放慢每个人的视线,它会显得很愚蠢。
MrCranky 2011年

Max Payne电子游戏使用“子弹时间”作为游戏中功能。某些《星球大战绝地武士》游戏(肯定是《绝地武士II》)也具有“ Force Speed”,可以通过减慢其他所有人的速度(另一个Force Speed用户除外)来加快您的速度。
KeithS 2011年

8

一般思想

这个问题最好用广义相对论来描述-例如,您只需通过望远镜观察卫星就可以看到子弹时间的影响(臭名昭著的中微子传播的速度比光的传播速度快)的原因-等式在这些条件下存在可解决的问题;意味着完全有可能。

据我所知,您的游戏将需要能够处理不同的参考框架(最终作用是“玩家”是活跃子弹时间的人):

  • 看到玩家的人会看到他们移动非常快。
  • 玩家会看到人们移动非常缓慢。
  • 玩家将参照其他所有人进入过去/未来。

幸运的是,这意味着子弹时间的玩家确实比其他所有人都有优势。他们可能无法瞄准他-但这不会令人信服,因为普通人在观察时间膨胀时会期望看不到明显的差异。

我强烈建议您将其发布在物理上(表明这是一个游戏,但您需要真正的理论知识),并询问如何在并行模拟中近似效果的想法。

我要看的一种可能的解决方案是,让每个人都经历渐进的弹药时间(远小于实际的弹药时间),这取决于玩家的落后程度(因为他已经迈入了未来)。时间)。这样,您可以近似地估计时差,而无需实际处理过去的状态等。您将需要某种方式来解释这种影响,例如“时间反弹”或其他,因为这在物理上是不正确的。

另一个想法是滥用最基本的物理方程式(s = d/t),当玩家进入子弹时间时,一切都会变小-如果您从他的角度将所有事物的大小减半,但根据他的原始参照系将其速度保持不变,(有效将其加倍),方程仍将保持平衡。太空电影中的扭曲驱动序列使用这种空间膨胀来描绘效果-因此人们习惯于看到它。

实际解决方案

我对此作了进一步的思考。如果您查看Steamworks网络系统是如何工作的(有人有链接吗?),服务器在时间上会保持一定的领先地位;每个客户都知道需要插值的“下一帧”。

例如,假设服务器比所有播放器领先20毫秒。当玩家进入子弹时间时,将其更新间隔更改为40ms(他的模拟将以40ms的时间步长运行,并且服务器会将他的动作排入未来40ms)-这基本上会参考其他玩家推向未来:使他从参考中移出更快,并使他们从他中移出较慢。一旦他离开子弹时间,其他人都比他有5ms的优势,这样他们就可以进行“追赶”(这是您的time rebound聪明球员,在这些追赶期间会子弹时间)。如果将抛物线映射到他的时间步长可能会好一些-这将使事情变慢,停止然后逐渐变快。

免责声明:我不是物理学家,但是我确实有相对论的实用知识。


4

我想增加我的0.02美元,因为我实现了原型子弹时间模式,该模式可用于《欧洲英雄》的多人游戏。

在单人游戏中,在正确的时间按下按钮会减慢时间,并放大预期的目标。我不想在多人游戏中减慢全局速度以复制该功能(因为游戏要支持16个同时播放的游戏者!),所以我使用了“冒泡”方法。

具体来说,当触发子弹时间模式时,将在目标飞机周围创建一个球体。时间流逝的速度根据到球体中心的距离而变化。时间从其表面线性降低到中心附近某处的最小值。速率也随着球体存在多长时间以及球体“蒸发”之前离开多长时间而变化。

通过发送一个数据包,该数据包定义了气泡的未来开始时间,从而在机器之间实现了同步。即使有延迟,这也可以使效果保持同步。(类似地,当效果要尽早结束时,一个数据包将声明其结束的将来时间。)

时间的流逝率总是在功能上定义的:给定一个球体的定义,当前时间和位置,就可以确定时间流逝的速度。

为了使效果发挥作用,必须将几个游戏系统适应这种“功能”的时间定义。飞机,子弹,导弹和其他特效都使用dt了通过调用适当功能而得出的个体。使原型工作的大部分工作都花在了这里。

结果相当不错:被子弹击中目标的玩家会明显放慢速度,并且有(很小的)机会可以从攻击者的十字准线和缓慢的子弹中摆脱出来。附近的玩家可以看到飞机和子弹在慢动作中互相躲避,但不受影响。

请注意,触发牌手也放慢了速度,但并没有因此而受到不利影响:他们放大了目标视线,可能会一击必杀。另一名玩家可能会在这种状态下试图杀死您(或杀死偷窃!),但是进入泡泡时,他们的飞机(和子弹)会受到影响,从而使您有时间逃脱。

不幸的是,尽管它起作用了,但我们却没有时间来完善和完善多人游戏的功能,因此将其删除。(单人游戏仍保留该功能,称为“ Ace Kill”。)


2

并不是真正的子弹时间,但可能会很有趣:

类似于Braid耗时的方法呢?就是说,离经历子弹时间的人越近,事情就越慢...如果您不在影响范围之内,时间通常会流逝。

……例如,如果玩家A进行子弹射击,它会在他周围建立一个“慢时间”的渐变范围,这样他就可以正确瞄准,但不一定能更快地移动-则玩家B向他发射子弹就必须过度预测子弹将击中的位置,因为子弹离他越近会减慢速度。

虽然,我考虑得越多,它的作用就越小,因为它可以使玩家A成为一个简单的目标(因为他的头会慢下来吗?)-但无论如何,用3D观看它还是很有趣的。


1
确实很有趣,但是如果子弹离玩家越近,它的速度就越慢,他就应该能够躲闪他们。
joltmode 2011年

是的,但是就像在《辫子》中一样,玩家本人也会放慢速度-即玩家的转弯速度仍然可以很快,因此可以更容易地部署障碍物或盾牌来避免子弹,但是空中飞行的实际运动是为了逃脱子弹的方式将变得更慢...
勒布

2

我知道这是一个老问题,但是我很难用大多数有关相对论的答案来提这个问题

按照问题中所述的效果实施,多人游戏中的子弹时间是不可能的。

之所以这样是因为相对论是如何工作的。你们中的某些人提到了它,并且显然理解了相对性,但是问题是您的模型设置不正确。

很多人在您的答案中都使用了“玩家A的参考与玩家B的参考”,但不幸的是,这些东西都不存在。是的,您有玩家,甚至可能有很多玩家,是的,他们可以控制自己的世界并与之互动,并拥有自己的游戏视角,但是视角并不是时间上的参照点:这只是投射到XY上的XYZ空间飞机。

只有一个时间参考点,即服务器(或主机)。关于世界的物理状态只有一种观点,因此只有一个参考点。玩家在屏幕上看到的是相同物理模拟的不同图形视图。

要让一个播放器以一种速度查看一个模拟,而另一个播放器以另一种速度查看相同的模拟并且不取消同步,则是不可能的。在某个地方,必须付出一些。

进行多个模拟或使服务器先于客户端运行的任何努力都是没有意义的。如果不强迫单个参考点,或者让思想变得不同步,并告诉玩家他们的行为并没有真正发生,那么就无法实现如后所述的效果。

我认为最好的解决方案与已经给出的解决方案相似,即具有类似辫子的效果,即您的速度会在玩家周围的气泡中改变。话虽如此,玩家不会放慢脚步,气泡始终会在他居中的位置进行定位和移动。这样一来,玩家就可以全速移动,而最接近他的玩家会感到放慢速度。他发挥了自己的优势,而远离该地区的人们则没有效果。那些接近的人放慢了速度,但是很明显有人正在使用加电功能(我建议您以某种方式突出显示正在使用该功能的玩家,以便对方玩家完全了解正在发生的事情和原因)。


1

那会很尴尬。甚至不用考虑时间膨胀的问题,想象一下您是谁在子弹时间上花费了4秒钟的玩家,而游戏中的其他每个人却在实时上花费了2秒钟。由于现实中的每个人都经历了同一时间,因此您必须以某种方式“收回”那两秒钟的时间。因此,在某些时候,您需要“跳过” 2秒的游戏时间,或者花一些时间运行比正常情况更快的时间,或者其他可能会使子弹时间浪费的时间。

此外,还有很多事情需要将您在2秒钟之内所做的工作发回给其他人1秒钟。


1

向玩家投掷类似时间的小型快速事件,以躲避子弹或自动跟踪敌方目标,同时使玩家的动作看上去模糊或“分阶段”给其他玩家(因此,他们不会为自己的子弹为何掉头而挠头没有击中)。这似乎是您可以为多人游戏进行的最简单,最实用的翻译。

我想,任何其他解决方案都需要改变游戏的某些物理元素,而一个或多个玩家不能同时应用其他元素。


0

只是让其他所有人放慢脚步,让玩家经历子弹时间。您可以通过降低鼠标的灵敏度来做到这一点。


以及这将如何转化为“平衡的游戏玩法”?:D
joltmode 2011年

它是平衡的,而不是玩家加速,周围的世界却变慢了。如果玩家加快速度,他将具有相同的优势,但这种方式更合理。
德里克(Derek)

0

假设我们的子弹时间有玩家A,实时有玩家B。他们从玩家B的角度进行以下操作:

  • 时间0s-玩家激活的子弹时间
  • 时间2秒-玩家A向玩家B射击
  • 时间3秒-玩家B向玩家A射击

现在从玩家A的角度来看,这将花费两倍的时间-因为世界对他的移动速度越来越慢:

  • 时间0s-玩家激活的子弹时间
  • 时间4s-玩家A向玩家B射击
  • 时间6s-玩家B向玩家A射击

最终,服务器中包含以下事件:

  • 时间0秒-玩家A激活子弹时间
  • 时间3秒-玩家B向玩家A开枪(B发起此动作,因此其遵循了时间表)
  • 时间4s-玩家A向玩家B射击(A发起该动作)

因此,我们有两个最初的问题。首先是A现在比其他所有人落后3秒的比赛时间。如果您的概念意味着他必须偿还这笔债务,那么这可能是一个有趣的游戏机制。想象一下一个基于掩护的射手,您可以在其中激活子弹时间以突破空地,但是一旦您安全地处于掩护之下,就必须停下来直到世界其他地方追上您(重播错过的三秒钟时间) )

第二个问题要大得多。服务器需要按时间顺序为每个玩家重新组织事件并找出结果。首先,B向A射击-这发生在游戏三秒钟之内,而A在6秒时看到了-到目前为止没有问题。在4秒时,玩家A向B射击。在B的时间轴中,这发生在两秒钟前。那么,对于他已经过去的两秒钟游戏时间(包括他在A处的射击),我们该怎么办?

我们可以取消它-基本上说“我知道玩家B 认为他开枪打死了那个家伙,但事实证明他已经死了,所以我们假装从未发生过”。这将是一次糟糕的经历,非常类似于滞后,但可以解决问题。

我们可以使这两个时间轴成为福音-使用服务器的观点作为整体,并分别担心每个人的时间轴。B在3秒时向A射击并杀死他。在4秒时,A向B射击并杀死他。两名球员都因看不见的投篮而死亡。听起来不太好,但是在疯狂的相对论世界中给所有玩家一个简短的课程之后,也许有一种很好的方法来做到这一点。

我们可能会有一个伪实时系统-一个回合制游戏,您可以在其中首先计划动作,然后触发事件的同时计算。一个很好的解决方案,它可以解决所有问题,而不是不是您要编写的游戏类型。

长话短说,我认为没有一种很好的方法来实现以经典意义对待子弹时间对使用它的人的影响- 他们移动得更快,他们认为世界更慢,其他人都正常进行。如果我们扭转了局面,而其他所有人都陷入了子弹计时器的视线,并且认为自己的运动速度变慢并且他们的控制变得迟钝,那么这一切都是同步发生的,并且没有问题。但这真的是子弹时间吗?尽管对外部观察者来说(和比赛重播)看起来像,但没有一个参与者会得到他们期望的效果。


它已经完成,效果是真实的,让您在几秒钟内感觉像个上帝(专家,最高薪酬3)。
卡图

-1

不,这是不可能的。想像一下,一个玩家跳到慢动作,其他玩家会看到什么?您希望他们看到子弹时间播放器正常运行,但有闪电反射,对吗?但不幸的是,每个玩游戏的人都将同时实时玩游戏。因此,这样做的唯一方法是放慢整个游戏的速度,摆脱每个人都处于子弹时间内的优势。同样,当有人按下该按钮时,让游戏一直变慢也会很烦人。

有一些变通办法,例如,通过放慢所有人的ELSE速度并让您正常移动(这样,在重放中,您可以将他们加速到正常水平,然后做出快速反应),但我认为这不是您真正想要的。


1
之前已经做过,所以说这不可能是一个明显的谬误。
zzzzBov 2011年

@zzzBov实际上,不可能以真正的形式在多人游戏中实现子弹时间。您必须先放慢整个游戏的速度,然后放慢现实世界中所有其他玩家的实际时间。考虑一下。作为一项工作,您将需要实现一些暂停/追赶的东西,但是按照真正的形式,这是不可能的。
SirYakalot

你说得对,子弹时间的最真实的形式,其中以正常速度一个用户运行,另一个在子弹时间是不可能的,但是OP是在“...... [执行]慢动作/子弹时间效应”,这被以前做过。
zzzzBov 2011年

@zzzBov“对于目前正在慢动作的玩家来说,这是一种幻觉。所以每个人都看到他是“实时的”,但他看到的一切都变慢了。” 引用原始问题。他特别要求一个以正常速度运行的用户,另一个在子弹时间运行。实际上,这几乎是他所要求的。
特雷弗·鲍威尔

早在几年前MP游戏中已经实现了这一事实(专家,Max payne 3等人),这使得该答案无效。
卡图

-1

FEAR在多人游戏中有子弹时间,但它适用于整个团队,这减慢了其他团队中每个人的速度。

实时多人游戏中的子弹时间在没有真正减慢其他人的情况下会使客户端失去同步,慢动作播放器将对其他玩家很久以前所做的事件做出反应,而他们将对当前事件做出反应。


1
虽然这是一个解决方案;我不喜欢它-唯一应该受到影响的人是子弹时间的玩家-仅仅因为卫星观察到您的移动速度较慢并不意味着您在自己的参考系中移动速度较慢。
乔纳森·迪金森

抱歉,我以前的编辑听起来有些少年。但是,“实时子弹时间”听起来像是一个矛盾。
仓鼠

-2

也许您应该安排必要的设备才能在PC上射击播放器,该播放器以接近光速的速度触发了子弹时间进入太空。

这样可以解决所有问题,但可能会产生更高的ping /延迟。


-3

好吧,如果它们的移动速度都比平时慢,但又不会太慢,那么激活它的人就可以移动得更快,就像将整个游戏淹没在水下或将其带到外太空,而激活它的人将像以往一样和平地移动


1
回答老问题没有错。然而,人们仍然应该努力使自己的回答很好,而这一次并没有真正提供多少在一个完整的解决方案的方式,也没有真正覆盖尚未包括在现有的答案地面。
2015年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.