问题标签 [physics-engine]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
243 浏览

physics-engine - 物理引擎 Spring Bug

所以我一直在研究支持多边形和圆形的 2d 物理引擎。我已经将分离轴定理用于除圆-圆之外的所有碰撞组合。这是引擎的基本格式:

*注意:不是实际代码

推进所有身体。

这是我遇到的问题的视频:http ://www.youtube.com/watch?v=kSZeuP4AiQ0&feature=youtu.be

错误是在开始附近看到的弹簧效应。我一直在绞尽脑汁想这个问题,但我一无所获。谁能告诉我问题是什么?

0 投票
1 回答
10803 浏览

java - Slick2D 和 JBox2D。如何绘制

在问这个之前,我在网上做了很多搜索。我就是做不到。我有点难以理解。那么我如何在正确的屏幕位置绘制图像,对应于世界位置的身体?谢谢。

如果其他人在同一障碍物前发现他自己,我发布了一个 HOW TO,感谢 normalocity 的良好解释。你可以在这里找到它:http ://romeo.akademx.ro/2012/04/06/slick-and-box2d/

这是渲染函数:

这些是我用来转换世界屏幕坐标的函数:

我也碰巧使用了在这个链接上找到的 SlickDebugDraw:http ://slick.javaunlimited.net/viewtopic.php?f=19&t=3610&sid=69614ac53aaf5724b808b75173e8e48e

但是他的 DebugDraw 绘制的完全是另一回事,然后是我的渲染函数。我有点困惑。

0 投票
1 回答
1755 浏览

c++ - 如何使用 Box2D 在 cocos2d iPhone 上调整 b2CircleShape 的大小

我有一个带有一堆圆圈的 2D 物理沙箱,这些圆圈在接触时会调整大小(越大的越大,越小的越小)。我可以很好地调整精灵的大小,而且我知道您无法缩放 B2Body - 您需要销毁它并重新创建它,但我对 Box2D 还不够熟悉,无法做到这一点。

这是我正在做的调整精灵大小的方法:

如何调整(销毁/重新创建)Box2D 主体(b2CircleShape?)的大小。

我认为这就是你在 C 中的做法 - 来自emanueleferonato.com(我不够开明,无法理解 C):

0 投票
2 回答
9419 浏览

c# - C# 库节点边图

我想编写一个程序来生成类似于此视频的力定向节点边图。有哪些好的 C# 库可以让我做到这一点?

0 投票
2 回答
1060 浏览

box2d - 如何根据角色行走/站立的坡度平滑旋转角色?

我需要根据他(一个矩形)站立或行走的平台范围来旋转角色精灵。我根据他所站立的平台的坡度来旋转它就达到了效果。但是有两个问题:

首先,旋转不顺畅。当角色从一个平坦的平台走到一个倾斜的平台上时,它会立即旋转,并且由于这种旋转,它会被向上推一点。

其次,一旦他走下斜坡并再次走上平坦的平台,我就无法相应地旋转角色。这是因为此时角色会同时与一个平坦的平台和一个倾斜的平台(它们被放置在一起)发生碰撞,因此在几步之后,角色将疯狂地来回旋转,因为两个碰撞检测功能一起工作。

我试图通过检测角色的面来解决这个问题,并试图找出他的哪个点(左或右)首先接触到某物,但它不起作用,因为我只能检测到碰撞,而不是“无碰撞”或“当角色离开某个平台时”。

我已附上有关情况的说明。请帮忙,谢谢!

PS:由于我不允许发布图片,请访问:http: //i.stack.imgur.com/jqPjt.png获取图片。谢谢。

0 投票
1 回答
1567 浏览

box2d - 在身体之间平稳移动

我不确定标题是否正确(如果不正确,请发表评论)。我有一个精灵(矩形体),我正在对其施加力以使其从左向右移动,然后向后移动。该平台由几个大小相同的矩形块组成,排列成一排,它们之间没有距离。它们形成的是一条完美的直线。平台可以是平的或倾斜的。

我想要的是

精灵在平台上顺畅地前后移动。

实际发生了什么

精灵有时会在从一个块移动到另一个块时被阻塞,即使块之间根本没有空间。有时也会在那时记录碰撞。

我试图搜索并找到一个叫做“内角”的东西,但不知道如何解决这个问题。有办法绕过吗?谢谢!

0 投票
1 回答
3981 浏览

c++ - 开始物理模拟

我刚刚完成了 CS282 - 计算机物理模拟的独立学习课程。这是我就读的大学第一次提供它。教科书是 Ian Millington 的“游戏物理引擎开发:如何为您的游戏构建强大的商业级物理引擎”。这本书充满了语法错误,虽然是有用的参考书,但很难编写代码。随书提供的源代码比书中说明的要完整得多,而且在破译代码方面存在一定程度的困难,尤其是出于图形目的,因为甚至没有关于如何使用引擎自己做某事的入门书,实际上在某些地方已损坏或未实现,或者如何使用 GLUT,这是本书使用的图形实用程序,并且不再开发!实际上,本书中的大部分参考资料都不是过去十年的,我想这对于教授 15 岁的代码来说还不错。虽然本文是在初学者环境中全面了解物理模拟的重要资源,但它并没有为 CS 学生介绍一个友好的沙盒来玩。

这基本上是一个实验,以找出哪些有效,哪些无效。我的教授还附上了一本关于将 ActionScript 与物理引擎结合使用的教科书,但该文本需要事先了解物理引擎的工作原理,因此出于实用性考虑,我们放弃了它。

我的问题是这样的:

我正在写一篇反思论文,我希望能够推荐这些文本的替代品,它为 CS 学生提供了一种简单的方式来进入并编写代码,并且实际上能够看到他们的成果劳动,可能与python。任何人都可以推荐一个对此有用的好的资源和/或文本吗?对于那些参加过这门课程或类似课程的人,你的经历是什么?

0 投票
1 回答
1994 浏览

c# - WPF C#,创建移动肥皂泡

我正在尝试创建一个 WPF 应用程序“游戏”,其中有肥皂泡“我用椭圆来表示它”在画布上移动,我可以用鼠标点击弹出它们。

知道如何让肥皂泡自然运动吗?我让他们移动,但只是从下到上。任何想法我怎么能像一个图书馆一样在这方面有所帮助..

0 投票
2 回答
1633 浏览

android - 破坏尸体时崩溃

当我破坏一个由多个通过关节连接的物体组成的物体时,我的应用程序崩溃而没有错误。当然,我做了一些研究,发现当物理引擎计算步数时破坏物体时会发生这种情况。所以我只是将实体添加到列表中并在 onUpdate() 中销毁它们,但这并没有帮助。有趣的是,即使在 onUpdate() 之外,破坏简单的实体也很有效,而且从未导致崩溃。

没有错误输出,就在我设法捕捉到一个说问题是 World.java 中的 NullPointerException 的第 507 行时。令人惊讶的是,我发现了以下内容:

有人能告诉我会发生什么吗?我什至一次摧毁尸体:

但问题仍然存在。

注释:我要破坏的对象是由几个通过 WeldJoints 连接到一个中心体的物体组成的。身体重叠,所以我使用负 groupIndex 来防止它们相互碰撞。在移除之前移除与特定身体相关的所有关节并没有帮助。错误输出:

0 投票
1 回答
1065 浏览

collision-detection - 2D 物理引擎:带有非弹性碰撞的弹跳球不会停止

我用 Java 创建了一个简单的 2d 物理引擎,它使用圆形射弹和直墙。目前,每一帧,每个射弹的位置都会提前velocity * (1/fps). 速度随后更新,每帧一次。碰撞检测使用先前和当前位置以点斜率形式定义一条线,检查该线是否与墙壁相交,如果该交叉点位于先前位置和当前位置之间,则记录碰撞并且射弹的当前位置和速度会相应更新。目前,没有预期的旋转。

现在,除了非弹性碰撞之外,这一切都有效。目前,非弹性碰撞将弹丸速度的垂直于其碰撞表面的分量乘以某个小于 1 的系数。

假设有一个弹丸在水平面上上下弹跳。应该发生的是弹丸速度的 y 分量随着每次弹跳而减小,导致弹丸的最大高度随着每次弹跳而减小,最终达到可以忽略不计的点。取而代之的是,球的最大高度降低到某个点,然后开始增加几次反弹,再次开始降低,进入一个恒定的循环。结果是球从未真正停止,而是似乎“抖动”。

发生这种情况是因为弹丸每帧都沿直线段移动,而且速度不是连续变化的。如果球落下的帧数多于球上升的帧数,则球会为这些额外的帧加速,最终会飞得比应有的更高。正在发生的事情是,球到达一个点,由于上述原因,一次反弹将其发送到比它应该具有的更高的位置。当最大高度由于非弹性碰撞再次下降时,它再次做同样的事情。

我尝试通过让球移动 来消除这种情况(v*t + 0.5*a*t^2),其中v是速度,a是重力加速度,并且t1/fps。这是可行的,除了当反弹变得足够小时,它会导致使用直线的碰撞检测失败。我也尝试过使用参数定义的抛物线进行碰撞检测,但在检测射弹之间的碰撞时,它变得令人难以置信的烦人和低效。如果您好奇,我可以更深入地解释我尝试的解决方案。

您还想提出其他简单的解决方案吗?

在此先感谢您,尤其是如果您真正阅读了这五个段落。