Questions tagged «physics»

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

7
如何以圆周运动拦截对象
我正在创建2D太空游戏,需要使飞船拦截一颗行星。我有用于直线截距的工作代码,但无法弄清楚如何计算圆形轨道上的行星位置。 该游戏在科学上不够准确,因此我不必担心惯性,重力,椭圆轨道等。 我知道太空飞船的位置和速度,也知道行星的轨道(半径)和速度

2
正确实施“双跳”
我正在使用Corona开发2D iPhone游戏(试用版,所以我不能使用他们的论坛)。游戏涉及角色从天上掉下来,我正在尝试为角色实施“双跳”,以使他能够在跌倒时跳起来。我正在使用Corona的物理库来使角色掉落,到目前为止,让他跳跃的最佳方法是使用垂直脉冲法 object:applyLinearImpulse(0, -0.4, object.x, object.y) 我面临的问题是,当角色刚开始时(垂直速度低),他跳得很高;而当他摔倒了一段时间(垂直速度高)时,跳得可以忽略不计。我猜测最好的解决方案是使用某种方程式,将速度作为输入,以使跳跃与速度无关,但是我无法弄清楚该方程式是什么。 好的,这就是我的全部想法。最终的问题是,您如何精确地实现物理双跳?有没有适合我的问题的方程式?我应该采取其他方法吗?之前在Smash Bros等游戏中就已经做到了,所以有一个可重复的解决方案,对吧?
23 2d  physics 

7
优化重力计算
我有一堆大小和速度各异的物体,它们相互吸引。每次更新时,我都必须遍历每个对象并合计由于每个其他对象的重力而产生的力。它的伸缩性不是很好,是我在游戏中发现的两个主要瓶颈之一,我不确定该如何提高性能。 这感觉就像我应该可以提高性能。在任何给定时间,系统中大约99%的对象对对象的影响都可以忽略不计。我当然不能按质量对物体进行排序,而只能考虑前10个最大的物体或某些物体,因为力随距离的变化比随质量的变化大(方程沿的线force = mass1 * mass2 / distance^2)。我认为,最好的办法是考虑最大的物体和最接近的物体,而忽略世界另一端可能无法影响任何事物的数百个微小的岩石碎片,但要找出哪些物体是最近我有遍历所有的对象,他们的立场正在发生变化不断,所以这不是我只能做一次。 目前我正在做这样的事情: private void UpdateBodies(List<GravitatingObject> bodies, GameTime gameTime) { for (int i = 0; i < bodies.Count; i++) { bodies[i].Update(i); } } //... public virtual void Update(int systemIndex) { for (int i = systemIndex + 1; i < system.MassiveBodies.Count; i++) { GravitatingObject body …

4
如何处理2D中的角碰撞?
我正在写一个自上而下的2D XNA游戏。自从我第一次上学以来,我一直在尝试自己编写物理学和碰撞学知识。 每当我的玩家精灵角色试图移动到其边界与墙的边缘相交的位置时,我都会计算出反弹角(入射角=反射角),并让玩家反弹出墙并避免碰撞。 我很难弄清楚如何处理我的精灵同时与两个墙边相交的情况,尽管它碰到了一个角落。 我的代码当前告诉我,两个墙的边缘已经相交,但是没有碰到哪个边缘,因此没有反弹。 选择哪个边缘反弹的数学测试是什么?看到它的时候很简单,但是我正在努力寻找它的数学测试。

4
我的物理引擎中更新问题的动量和顺序
这个问题是我上一个问题的“后续”问题,涉及到碰撞检测和解决,您可以在这里找到。 如果您不想阅读上一个问题,这里是有关我的物理引擎如何工作的简短描述: 每个物理实体都存储在称为SSSPBody的类中。 仅支持AABB。 每个SSSPBody存储在一个名为SSSPWorld的类中,该类更新每个身体并处理重力。 每帧,SSSPWorld都会更新每个身体。 每个更新的实体都在空间哈希中查找附近的实体,检查是否需要检测与它们的碰撞。如果是,它们将调用“碰撞”事件并检查是否需要解决与其之间的冲突。如果是,他们将计算穿透矢量和方向重叠,然后更改其位置以解决穿透问题。 当一个物体与另一个物体碰撞时,只需将其速度设置为自己的速度即可将其速度传递给另一个物体。 如果从上一帧起未更改位置,则将物体的速度设置为0。如果它也与移动的物体(例如升降机或移动的平台)相撞,则会计算升降机的运动差,以查看物体是否尚未从其最后位置移动。 同样,当一个实体的所有AABB角与某帧中的某些内容重叠时,它会引发“压碎”事件。 这是我的游戏的完整源代码。它分为三个项目。SFMLStart是一个简单的库,用于处理实体的输入,绘制和更新。SFMLStartPhysics是最重要的类,其中SSSPBody和SSSPWorld类位于其中。PlatformerPhysicsTest是游戏项目,包含所有游戏逻辑。 而这是在SSSPBody类,评论和简化了“更新”的方法。如果您不想看整个SFMLStartSimplePhysics项目,则只能看一下。(即使这样做,您也应该看看它,因为它已被注释。) .gif显示两个问题。 如果将实体放置在不同的顺序中,则会发生不同的结果。左侧的板条箱与右侧的板条箱相同,只是以相反的顺序放置(在编辑器中)。 两个板条箱都应朝屏幕顶部推进。在左边的情况下,没有箱子被推进。在右边,只有其中之一是。两种情况都是意外的。 第一个问题:更新顺序 这很容易理解。在左侧的情况下,最上面的板条箱先于另一个板条箱被更新。即使底部的板条箱将速度“传递”到另一个板条,它也需要等待下一帧移动。由于它没有移动,因此底部木箱的速度设置为0。 我不知道如何解决此问题。我希望解决方案不依赖于“排序”更新列表,因为我觉得我在整个物理引擎设计中做错了什么。 主要的物理引擎(Box2D,Bullet,花栗鼠)如何处理更新顺序? 第二个问题:只有一个板条箱被推向天花板 我还不明白为什么会这样。“弹簧”实体的作用是将物体的速度设置为-4000,然后将其重新放置在弹簧本身的顶部。即使禁用重新定位代码,该问题仍然会发生。 我的想法是,当底部板条箱与顶部板条箱发生碰撞时,其速度设置为0。我不确定为什么会这样。 尽管有机会看起来像放弃第一个问题的人,但我在上面发布了整个项目的源代码。我没有任何东西可以证明这一点,但是相信我,我努力解决了这个问题,但是我找不到解决方案,并且我以前没有任何物理和碰撞方面的经验。我一直在努力解决这两个问题超过一个星期,现在我很绝望。 我认为如果不从游戏中剥离许多功能(例如,速度传递和弹簧),就无法找到解决方案。 非常感谢您花时间阅读此问题,如果您甚至想提出解决方案或建议,也要多谢。


3
如何避免像素艺术运动中的“楼梯效应”?
我在精确的像素坐标处渲染精灵,以避免因抗锯齿而引起的模糊效果(精灵是像素艺术的,如果进行过滤,效果会很糟)。但是,由于对象的移动涉及可变的速度,重力和物理相互作用,因此轨迹以亚像素精度计算。 在足够大的屏幕空间速度(vΔt大于2或3像素)下,此效果很好。但是,当速度较小时,会出现明显的阶梯效应,尤其是沿对角线时。在非常慢的屏幕空间速度(v << 1像素/秒)下,这不再是问题,因此我只在寻找中等速度值的解决方案。 左图是通过简单舍入对象坐标获得的大速度绘制的轨迹。在中间,您可以看到当速度变小时会发生什么,以及我正在谈论的阶梯效应。在右边,我想获得的轨迹轨迹。 我对算法思想感兴趣,以便对轨迹进行滤波,以最大程度地减少混叠,同时保留大小速度下的原始行为。我可以访问Δt,即时位置和速度以及任意数量的先前值,但是由于它是实时模拟,所以我不知道将来的值(尽管如有必要,可以在某些假设下推断出估算值) 。请注意,由于物理模拟的缘故,方向突然改变也会发生。

3
为什么RK4比Euler集成更好?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Game Development Stack Exchange 的主题。 8个月前关闭。 在这些精彩幻灯片的结尾,作者比较了所介绍的所有不同集成商。除了改进的Euler集成和Runge Kutta 4集成(均通过所有测试)外,它们都无法实现。 我想我应该提到我正在开发一个物理强度不是很高的2D游戏。我只是想知道改进的Euler集成会在哪里出现不足,而必须使用RK4。 我的游戏主要包括简单的重力(跳跃和下降),沿X和Y轴的运动以及边界框碰撞。实施RK4是否值得,还是经过改进的Euler足以满足要求?我看到了很多讨论都对Euler Integration的用户提出了质疑,但是据我所知,改进的Euler在简单的2D问题上是同等的。我想它也会更快。

4
是否有可以模拟流体和气体的二维物理引擎?[关闭]
关闭。这个问题是题外话。它当前不接受答案。 想改善这个问题吗? 更新问题,使其成为Game Development Stack Exchange 的主题。 4年前关闭。 在这一点上,平台和编程语言都无关紧要,我只想知道是否为此存在某种东西。任何帮助表示赞赏。
20 2d  physics 

6
如何建立2D物理引擎?[关闭]
很难说出这里的要求。这个问题是模棱两可,含糊,不完整,过于宽泛或夸张的,不能以当前的形式合理地回答。如需帮助澄清此问题以便可以重新打开, 请访问帮助中心。 6年前关闭。 我制作的最高级的游戏是使用物理引擎Box2dFlashAS3制作的8球台球游戏,以及带有关卡的平台游戏。 当我做平台游戏时,我一直希望知道如何制作引擎,以便我可以重复使用它。当我看到具有坡度,弯曲坡度,完美重力和真实物理学的游戏时,我一直希望我知道如何对引擎进行编码。 请为需要的任何相关知识库建议技术和文章。

6
用于插值和线程处理的数据结构?
我最近一直在处理游戏中的一些帧速率抖动问题,看来最好的解决方案是Glenn Fiedler(游戏开发人员)在经典的“ 修复您的时间步伐”中提出的解决方案!文章。 现在-我已经在使用固定的时间步进行更新。问题是我没有进行建议的插值渲染。结果是,如果渲染速率与更新速率不匹配,我将获得双倍或跳过的帧。这些可以在视觉上引起注意。 因此,我想在游戏中添加插值法-我很想知道其他人如何构建数据和代码来支持这一点。 显然,我将需要存储(在何处/如何?)与渲染器相关的游戏状态信息的两个副本,以便可以在它们之间进行插值。 另外-这似乎是添加线程的好地方。我想像一个更新线程可以在游戏状态的第三个副本上工作,而将其他两个副本保留为渲染线程的只读状态。(这是一个好主意吗?) 看来,有游戏的状态的两个或三个版本可能会引入性能和- 远更重要的是-可靠性和开发人员的生产力问题,相比于仅具有单一版本。因此,我对缓解这些问题的方法特别感兴趣。 我认为应该特别注意的是如何处理游戏状态中添加和删除对象的问题。 最后,似乎某种状态不是直接需要渲染的,还是要跟踪不同版本的状态太难了(例如,存储单个状态的第三方物理引擎)-因此,我想知道如何人们已经在这样的系统中处理了这类数据。

6
具有物理模型的船舶的AI控制
我正在寻找有关如何在2D空间中实现跟踪的想法。不幸的是,我对AI /路径查找/自主控制了解不多。 假设这艘船可以自由移动,但它具有质量和动量。同样,外力可能会影响它(爆炸等)。玩家可以随时为飞船设定目标,并且该目标应到达该地点并停止。 没有物理学,这将很简单,只需指出方向即可。但是,如何应对现有的势头然后停下来呢?我不想直接修改船的位置。 编辑:只是要弄清楚,与船舶本身的物理相关的数学并不是问题。

2
通常如何在面向组件的系统中构建物理或图形组件?
我花了最后48个小时来阅读对象组件系统,并觉得我已经准备好开始实施它。我已经创建了基本的Object和Component类,但是现在我需要开始创建实际的组件,我有点困惑。当我用HealthComponent或基本上只是属性的东西来考虑它们时,这是很有意义的。当它作为物理/图形学组件更为通用时,我会有些困惑。 到目前为止,我的Object类是这样的(如果您注意到我应该进行的任何更改,请告诉我,这仍然是新的)... typedef unsigned int ID; class GameObject { public: GameObject(ID id, Ogre::String name = ""); ~GameObject(); ID &getID(); Ogre::String &getName(); virtual void update() = 0; // Component Functions void addComponent(Component *component); void removeComponent(Ogre::String familyName); template<typename T> T* getComponent(Ogre::String familyName) { return dynamic_cast<T*>(m_components[familyName]); } protected: // Properties ID m_ID; Ogre::String …

1
如何检测壁架?
在我的游戏中,我希望我的角色能够抓住并抓住壁架,并有足够的空间提拔自己。 如何检测是否有壁架,以及角色是否有足够的空间爬上去?
18 physics 

2
在2D平台游戏中,如何确保玩家在斜坡上平稳移动?
我正在为2D平台游戏开发物理引擎。我正在使用分离轴定理进行碰撞检测。地面是由定向包围盒构成的,播放器是与轴线对齐的包围盒。(具体来说,我使用的是《实时碰撞检测》一书中的算法,该算法使用SAT对OBB执行扫掠碰撞检测)。我在碰撞响应中使用了一个很小的(接近零)恢复系数,以确保动态对象不会穿透环境。 该引擎通常运行良好,只是我担心可能会出现的一些极端情况。例如,在图中,A,B和C是地面。玩家沿着B向A左转。在我看来,由于不准确,玩家方块在继续向上和向左移动时可能会略低于方块B。因此,当到达A时,玩家的左下角可能会与A的右侧发生碰撞,这是不希望的(因为这样做的目的是使玩家在A的顶部上方平稳移动)。当玩家位于方框C的顶部,向B的左侧移动时,似乎会发生类似的问题-B的最极端点可能会与玩家的左侧发生碰撞,而不是玩家的左下角在上下滑动B以上 Box2D似乎通过存储其边缘形状的连接性信息来解决此问题,但是我不太确定它是如何使用此信息来解决问题的,并且在查看代码后,我并没有真正掌握它的作用。 任何建议将不胜感激。
18 2d  physics  platform 

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.