我什么时候应该使用物理引擎?[关闭]


12

自从发现Box2D以来,我就将其用于我尝试编写的任何类似于游戏的应用程序,从很小的原型或测试程序的小程序到实际项目。

多亏了它,从碰撞到实际的物理处理都非常容易。

不过,有时候我对此有一些疑问:如果我只需要处理圆或AABB,并且不需要先进的物理工具(诸如此类的接头或类似的东西),我认为物理引擎可能会增加某种规模,不必要的开销。

再次提出我的问题:您会在物理非常简单的游戏(例如,超级马里奥)中使用Box2D(或其他物理引擎)吗?而且,如果没有,为什么?


2
做正确的事。您认为您的游戏需要物理引擎吗?您认为Mario将从Box2D中受益吗?最新的Mario凭借良好的物理性能当然拥有不错的感觉,但是却感觉不到我在Box2D中看到的任何东西。
杰夫2010年

@Jeff:这取决于问题“我何时应使用Box2D?” 或“我什么时候应该使用物理引擎?”。新的Mario当然包含一个物理引擎。

1
@Joe Wreschnig:是的,但是有没有使用过物理引擎的情况?只有我能想到的是文字冒险,或指向和点击。我想这取决于您对物理引擎的定义的一般程度
Jeff

@Jeff:很少(非物理)益智游戏需要一种,例如《俄罗斯方块》,《宝石迷阵》。在动作游戏中,我可能会争辩说,大多数2D shmup不能从物理引擎中受益,因为它们通常只需要AABB /圆重叠检查,无碰撞响应,绝对固定的运动路径和恒定速度。但是,平台游戏都是关于物理学的。

Answers:


8

如果Box2D占用的内存,磁盘空间,开发工作量或处理器时间过多,那么请不要使用它。否则,如果您觉得有用,则没有理由避免使用它。


2
这就是真正的含义。如果它使您的生活更轻松,并且不会阻止您脱离所需的平台,那么即使您不使用其中的一部分,这也是胜利。

1
换句话说,“重新发明轮子的唯一原因是学习了重新发明轮子”。
2011年

4

就像超级马里奥(Super Mario)一样简单,因为它实际上没有太多物理特性。(马里奥的跳跃不会影响其他物体的物理)

如果您在多个方面(一个以上)使用物理学来影响其他对象的结果,那么我将使用引擎。


另一方面,马里奥(Mario)确实具有动量,加速度,可变大小和方向性碰撞,所有这些都是您可以通过物理引擎“免费”获得的,而不仅仅是简单的边界重叠检查。

我同意-我认为大多数情况下,物理引擎会为您提供很多东西,而这会浪费您实施自己的时间。
Christopher Horenstein 2010年

3
没错,最好不要发明车轮,我只是发现,如果我只想要一个车轮,就不会为汽车设计蓝图。最重要的是,您将对整个游戏有更多的了解,并且更容易更改/更改物理原理。
惊吓

1
这真是一个可怕的比喻。这更像是,您想要一个车轮和轮轴,也许想要一个转向柱和马达,但可能不需要仪表板或电动车窗。

3
谁不想要电动窗?
惊吓

2

我的答案是肯定的,绝对要使用像Box2D这样的物理引擎来做简单的事情,因为您不应该花费不必要的开发时间来实现从物理引擎中快速获得的某些功能。例如,定义一个静态物体并在其上放置一个动态物体,然后向动态物体施加力以进行方向输入,几分钟后便有了平台游戏。我认为引擎不会增加足够的开销以至于不值得这样做。


3
但是,可以说弄清楚如何实现和使用Box2D将花费更长的时间来创建简单的物理。(尽管我想这取决于物理学的使用范围)
Spooks 2010年

1
@Spooks:我想不到还有比Box2D更有用的东西了。

我完全同意乔在这里。对于Box2D附带的有用性,没有简单的替代方法。我无法想象要编写出可以满足人们需求的东西,而不是学习如何使用Box2D创建一些夹具并定义重力。
Christopher Horenstein

1

如果游戏中的“物理”很简单,则无需导入物理引擎。

由于在对物理建模和模拟物理物理学之间存在差异,因此我宽松地使用了“物理”一词。区别非常重要。

例如,在马里奥兄弟(Mario Bros.)中,当您跑步和停车时,您会滑动一点。考虑一下如何实现。

您可以通过定义所有必要的变量对其进行建模:质量,重力,摩擦系数,推力等,然后计算新的速度,加速度等。

但是这值得吗?您可以通过降低玩家不动时的速度来模拟相同的效果...

就像是:

if( pressing movement key ) { 
 speed = 5; 
} else { 
 if(speed) speed--; // slide!
} 

区别在于,一个是物理学,另一个不是。两者都有优点和缺点。但是作为简单游戏的一般规则,更容易伪造它。


1
那种物理学是很粗糙的。如果您要伪造它,不妨使其看起来不错。摩擦= 0.9或小于1的某个数字。speedX * =摩擦;speedY * =摩擦;
AttackingHobo 2010年

2
当然,到项目结束时,它变成“如果(按下移动键,不移动,在冰上,而不是在水下,并且您具有特殊的加电功能,并且您没有骑在靴子上……)”。

@AttackingHobo:这篇文章的目的不是要制作一个不错的滑动算法。它是为了说明仿真和模型之间的区别。
aaronfarr

@Joe:这些只是对摩擦变量的修改。.也许您和@AttackingHobo应该聊天:P使用物理引擎,您必须为游戏中的每个对象定义属性。我的观点是,为简单游戏插入物理引擎不应该是自动的。其情况。
aaronfarr

1
@aaronfarr:模拟和模型之间没有区别;为此,它们是同义词。您所看到的只是,玩具模型/模拟的隔离部分比完整的Box2D更少的代码。

0

您必须根据情况决定

使用您的自定义引擎的专家

  • 软件受控制(新版本未更改)
  • 适合您的游戏(仅以您需要的方式提供游戏所需的功能)
  • 灵活性(您想要的任何疯狂动态都可以进行编码,任何将来的功能都不会依赖引擎)
  • 学习经验(也许有一天您需要改进引擎,并且需要如何构建引擎)
  • 较少研究和编程简单功能(有时对引擎做一些事情可能需要深入了解其结构..可能不值得)
  • 简单功能的性能更高(对于简单的特定功能,您可能会获得比通用引擎更高的性能)
  • 更少的内存(仅使用必要的功能时,对象和代码可能会占用更少的空间和内存)

现成的物理引擎的优点:

  • 无需过多努力即可适应新硬件和新操作系统
  • 复杂功能的研究和编程工作更少
  • 复杂功能的更高性能
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.