Questions tagged «physics»

与物体在空间和时间上的运动有关。包括诸如加速度(推力和重力),质量,碰撞响应,摩擦等概念。

3
冲动跳跃
有一件事情一直困扰着我,那就是如何在平台游戏机中实现“人造脉冲”跳跃。如果您不知道我在说什么,请考虑一下《马里奥》,《柯比》和《洞穴物语》中的《名言》。他们有什么共同点?好吧,跳跃的高度取决于按住跳跃按钮的时间。 知道这些角色的“冲动”并不是像实际物理学中那样在跳动之前就已经建立的,而是在空中时建立的,也就是说,您可以很好地将手指抬起至最大高度的中途,即使在它和句号之间的减速;这就是为什么您可以轻松地跳一跳并保持跳远的原因-我对它们如何保持轨迹成弧形着迷。 我当前的实现方式如下: 按下跳转按钮时,重力将关闭,并且化身的Y坐标系将因重力的恒定值而减小。例如,如果事物跌落到每刻度Z个单位,它将增加每勾Z个Z单位。 释放按钮或达到限制后,虚拟化身会减速,使其覆盖X个单位,直到其速度达到0;一旦完成,它就会加速直到其速度与重力匹配-坚持这个例子,我可以说它从0加速到Z单位/刻度,同时仍然覆盖X单位。 但是,此实现会使跳跃变得过于对角,并且除非化身的速度快于重力,否则这将使其在我当前的项目中变得太快(它在大约每跳动4像素处移动,而重力在每跳动10像素处移动) 40FPS的帧率),它也使它比水平更垂直。那些熟悉平台游戏的人会注意到,角色的弧形跳跃几乎总是使他们能够跳得更远,即使它们的速度不如游戏的重力那么快;如果游戏不正确,即使玩法不正确,也会证明自己是正确的。非常违反直觉的。我知道这一点是因为我可以证明我的实现非常烦人。 有没有人尝试过类似的机制,甚至可能成功了?我想知道这种平台游戏跳跃的背后是什么。如果您以前没有任何经验,并且想尝试一下,那么请不要尝试纠正或增强我所解释的实现,除非我采取了正确的方法-尝试从以下方面弥补您的解决方案刮。我不在乎您是否使用重力,物理学或其他方法,只要它能显示出这些伪脉冲的工作原理即可。 另外,我希望它的显示避免特定语言的编码。例如,为我们分享一个C ++示例或Delphi ...就像我在我的项目中使用XNA框架一样,并且不介意C#的东西,我没有太多的耐心来阅读别人的代码,某些使用其他语言的游戏开发人员可能会对我们在此处获得的成就感兴趣,因此不要介意使用伪代码。 预先谢谢你。

2
多人物理网络
我很好奇赛车游戏中如何实现具有物理功能的多人网络。我们拥有一个物理世界,其中有多个由不同人员控制的快速行驶的车辆。假设车辆拥有武器并且可以相互射击(扭曲金属,Vigilante v8) 我担心撞车和撞车。权威服务器还是更好的选择?

6
球物理:在球静止时平滑最终的反弹
在我的小弹跳球游戏中,我遇到了另一个问题。 我的球反弹得很好,除了最后一刻即将停止。球的运动对于主体部分来说是平滑的,但是直到最后,当球落在屏幕底部时,它会突然抽动一段时间。 我能理解为什么会这样,但是我似乎无法解决。 如有任何建议,我将不胜感激。 我的更新代码是: public void Update() { // Apply gravity if we're not already on the ground if(Position.Y < GraphicsViewport.Height - Texture.Height) { Velocity += Physics.Gravity.Force; } Velocity *= Physics.Air.Resistance; Position += Velocity; if (Position.X < 0 || Position.X > GraphicsViewport.Width - Texture.Width) { // We've hit a …
12 xna  c#  physics 

4
用SAT查找接触点
分离轴定理(SAT)使确定最小平移向量(即可以分离两个碰撞对象的最短向量)变得简单。但是,我需要的是沿着穿透物体正在移动的向量(即接触点)将物体分开的向量。 我画了一幅画以帮助澄清。有一个框,从前面的位置移动到后面的位置。在其后位置,它与灰色多边形相交。SAT可以轻松返回MTV,这是红色矢量。我正在寻找计算蓝色向量。 我当前的解决方案在前后位置之间执行二进制搜索,直到已知蓝色矢量的长度达到某个阈值为止。它可以工作,但是这是一个非常昂贵的计算,因为需要在每个循环中重新计算形状之间的冲突。 有没有更简单和/或更有效的方法来找到接触点矢量?

3
您如何在2物理引擎(如farseer / box2d)中遵循AI路径?
我正在将自己一直在努力的2d自上而下游戏移植到像Farseer这样的合适的刚体物理引擎中。到现在为止,我只是在需要的地方才编写了自己的物理代码。 我正在尝试在这里学习正确的做事方式。 一旦在物理引擎内部使它们成为刚体,使AI遵循设定路径的正确方法是什么? 如果我在地图上有需要AI遵循的导航节点路径,那么以前,我会通过沿下一个步骤计算它们应位于的下一个位置并将其手动设置为该位置来手动沿路径移动它们。 但是现在它们是刚体,容易受到碰撞以及任何可能撞击它们并将其击落的力。 因此,为了使AI向前迈进,我相信我现在应该向它们施加冲动/力量了吗?我不应该再手动设置每个帧的位置。 因此,我认为我需要从一个确定性世界出发,在这个世界中,我必须迫使AI严格遵循一个不确定性世界,在这种情况下,如果受到撞击,它们可能会在任何方向被撞倒,我只是将它们轻推到路径中的下一个节点让他们动起来。 是对的吗?那是别人怎么做的吗? 这就引发了一些问题,即如何避免您的AI一直走在不正确的道路上,而又如何避免它们卡在风光的拐角处?你们如何处理这种事情呢? 还是以某种方式将两者混合并让您的AI通过手动设置其位置而遵循固定的路径,并且仅在您可以轻松控制的某些情况下对其他作用力做出反应,才更好呢? 感谢您的任何建议。


4
不同插值公式的动画示例:有链接吗?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 5年前关闭。 我记得曾经发现过一个链接到一个巨大页面的链接,该页面包含与非线性插值曲线不同的方程式,例如,如果您想平稳地停下汽车等。 有时在没有物理引擎帮助的情况下模拟某些真实世界的加速/速度行为可能很有用,这可以真正简化代码。 你知道这个页面在哪里吗?我无法为Google提供正确的关键字... 编辑:我只是搜索我以前的笔记本电脑书签,我发现它:http : //sol.gfxile.net/interpolation/

1
将物理和游戏逻辑与UI代码分开
我正在研究一个简单的基于块的益智游戏。 游戏过程由游戏区域中的许多移动块组成,因此这是一个简单的物理模拟。但是,我认为我的实现还远远不够理想,我想知道您是否可以为我提供任何有关如何更好地实现的建议。 我将代码分为两个区域:游戏逻辑和UI,就像我处理许多益智游戏一样: 游戏逻辑负责游戏的一般规则(例如国际象棋中的正式规则系统) UI显示游戏区域和棋子(例如棋盘和棋子),并负责动画(例如棋子的动画移动) 游戏逻辑将游戏状态表示为逻辑网格,其中每个单位是一个单元格在网格上的宽度/高度。因此,对于宽度为6的网格,可以将宽度为2的块移动四次,直到其与边界碰撞。 UI会获取此网格,然后通过将逻辑大小转换为像素大小(即,将其乘以一个常数)来绘制它。但是,由于游戏几乎没有任何游戏逻辑,因此我的游戏逻辑层[1]除了碰撞检测之外没有其他工作。运作方式如下: 玩家开始拖动一块 用户界面要求游戏逻辑确定该棋子的合法移动区域,并让玩家将其拖到该区域内 玩家放手 UI将样片捕捉到网格(以便它位于有效的逻辑位置) UI告诉游戏逻辑新的逻辑位置(通过mutator方法,我宁愿避免) 我对此不太满意: 我正在为我的游戏逻辑层而不是UI编写单元测试,结果所有棘手的代码都在UI中:阻止该部分与其他对象或边界碰撞并将其捕捉到网格中。 我不喜欢UI告诉游戏逻辑有关新状态的事实,我宁愿让它调用movePieceLeft()方法或类似的方法,就像我在其他游戏中一样,但是我对这种方法没有了解,因为游戏逻辑对用户界面中可能发生的拖动和捕捉一无所知。 我认为最好的办法是摆脱游戏逻辑层,改为实现物理层。我对此有一些疑问: 这样的物理层是常见的,还是让游戏逻辑层更典型地做到这一点? 捕捉到网格和片段拖动代码是属于UI还是物理层? 这样的物理层通常可以与像素大小或某种逻辑单位(例如我的游戏逻辑层)一起使用吗? 我曾经在游戏的代码库中看到过基于事件的碰撞检测,即玩家只需拖动棋子,UI就会顺从地渲染并通知物理系统,物理系统将调用onCollision()方法一旦检测到碰撞,就会在工件上撞上。更常见的是什么?这种方法还是先要求法律流通领域? [1] 层可能不是我所要表达的正确词,但是子系统听起来有些夸大其词,而类却是错误的,因为每一层都可以包含多个类。

5
2D平台游戏:为什么要使物理依赖于帧速率?
“ Super Meat Boy”是一个困难的平台游戏,最近出现在PC机上,需要出色的控制和像素完美的跳跃。游戏中的物理代码取决于帧速率,该帧速率被锁定为60fps;这意味着,如果您的计算机无法全速运行游戏,则物理会变得疯狂,从而(除其他事项外)使您的角色运行速度变慢并掉落地面。此外,如果关闭了vsync,游戏将运行得非常快。 有2D游戏编程经验的人可以帮助解释为什么用这种方式编码游戏吗?以恒定速率运行的物理循环不是更好的解决方案吗?(实际上,我认为游戏的某些部分使用了物理循环,因为某些实体无论帧速率如何都可以继续正常移动。另一方面,您的角色运行[fps / 60]的速度也一样快。) 我对这种实现方式感到困扰的是游戏引擎和图形渲染之间的抽象性的丧失,它依赖于特定于系统的事物,例如监视器,图形卡和CPU。如果由于某种原因,您的计算机无法处理垂直同步,或者无法以60fps的速度正常运行游戏,那么它的性能将大打折扣。为什么渲染步骤会以任何方式影响物理计算?(如今,大多数游戏会减慢游戏速度或跳过帧。)另一方面,我了解到NES和SNES上的老式平台游戏在很大程度上取决于其固定的控制和物理帧率。为什么会这样,并且有可能在不依赖帧率的情况下在这种情况下创建patformer?如果将图形渲染与引擎的其余部分分开,是否必然会降低精度? 谢谢您,如果问题令人困惑,我们深表歉意。
12 graphics  physics 

5
我什么时候应该使用物理引擎?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 2年前关闭。 自从发现Box2D以来,我就将其用于我尝试编写的任何类似于游戏的应用程序,从很小的原型或测试程序的小程序到实际项目。 多亏了它,从碰撞到实际的物理处理都非常容易。 不过,有时候我对此有一些疑问:如果我只需要处理圆或AABB,并且不需要先进的物理工具(诸如此类的接头或类似的东西),我认为物理引擎可能会增加某种规模,不必要的开销。 再次提出我的问题:您会在物理非常简单的游戏(例如,超级马里奥)中使用Box2D(或其他物理引擎)吗?而且,如果没有,为什么?
12 physics 

4
Box2D获取物体的边界框
在Box2D中,我很好奇是否有可能获得世界上已经创建的物体的边界框。 因此,基本上,人体是被创造的,它与世界等相互作用。我需要那个身体的边界框。可能吗?
12 physics  box2d 

2
在游戏中如何进行结构分析(例如:桥梁建筑,挖掘或死亡以及3D)?
据我了解,典型的交互式桁架系统将需要进行大量计算,因为每个组件都会影响整个系统。我认为您可以在仿真中以准确性为代价随意停止给定的迭代次数,但是我不知道这些游戏是否使用了这种方法(桥梁游戏是桁架系统的一个示例)。另一方面,像Dig或Die这样的游戏具有非常复杂的结构系统,该系统还考虑了扭矩(我认为)和压缩,并且运行速度非常快,并且可以在非常广泛的系统上运行。我猜基本计算可能是相似的,但是如果没有,我对两种方法都感兴趣。 你们知道这些是怎么制成的吗?它们有任意限制吗?还是完全使用了不同的算法?另外,我想你们想出的任何方法都可以应用于3D系统,但如果不是,或者如果不明显,请至少提供一个有关如何将其用于3D的线索,因为我对2D和3D都感兴趣游戏。 我知道我不应该在这里感谢,但是我发现不至少要感谢您的时间是不公平的,我希望不要删除此段。 编辑:如果我要猜测,我会说Dig或Die为每个块存储矢量,然后运行一个迭代算法,直到模拟的额外精度对于系统的限制毫无意义(例如,系统太大而无法崩溃),因此受到半任意(因为它基于应用程序)迭代次数的限制。但是我可能是错的。

2
如何防止光线投射的车轮侧滑?
我一直在使用本文作为参考来编写一个非现实的汽车物理引擎作为学习练习。 我有一辆可以正确地与地形碰撞并为每个车轮施加正确的悬架力的汽车。我的下一个问题是防止车轮横向移动。例如,如果我将汽车停在斜坡上,它将在斜坡上向侧面滑动,然后再从侧面停止滑动(因为没有任何形式的摩擦)。 链接的文章说,必须施加“侧向力”,再加上向前的力,但它掩盖了该侧向力的计算方式。 给定每个车轮的碰撞信息(相交法线等)以及有关汽车刚体的信息,如何计算施加到刚体上的适当侧向力以防止侧向运动?

3
如何修复物理引擎中“弹出”或抖动的对象?
我有一个简单的物理引擎,可以通过直接校正重叠物体的位置(现在仅是圆形)来解决碰撞,而不仅仅是更改速度或施加脉冲。仅在影响已解决后或在集成过程中才更改速度。 我遇到的问题是,在对象堆中,顶部对象在堆底部的对象上施加了过多的压力(隐式存在,算法中没有压力建模),这导致它们被推过地板,等等 我想通过按其y坐标对对象进行排序来解决此问题,因此可以从下至上解决冲突。但是现在,引擎显示了实际上应该处于静止状态的对象的奇怪弹出行为(请参阅gif) 不只是提供源代码,这可能是什么?

2
如何在2D平台游戏机中使角色在不平坦的墙壁上行走?
我想要一个可玩的角色,他可以以任何角度(包括侧身和倒置)在有机表面上“行走”。通过具有倾斜和弯曲特征的“有机”水准仪代替90度角的直线。 我目前正在从事AS3(中等业余经验)的工作,并使用Nape(几乎是新手)来进行基于重力的基本物理学,该行走机械手显然是一个例外。 有没有可能使用Nape约束的程序方法来进行这种步行动作?还是最好按照水平面的轮廓创建明确的步行“路径”,并使用它们来约束步行运动?

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.