问题标签 [farseer]

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 回答
675 浏览

box2d - Farseer/Box2D - 将旋转关节(或其他)的旋转约束到一个方向?

我正在尝试在 Farseer(基于 Box2D)中创建一台机器,该机器需要使用单向轴承,以便重物仅沿逆时针方向围绕一个点旋转。

我使用 Revolute 关节连接了重量,除此问题外一切正常。我需要重物上的重力仍然影响机器。所以它应该摆动出来,并且不能在运动的物理特性仍然存在的情况下摆动回来。

如果有人对我如何实现这一点有任何想法,我将不胜感激。

0 投票
1 回答
82 浏览

c# - 获取作用在身体上的力

由于我正在构建物理教学平台,因此我需要知道此刻作用在物体上的总力。这样,我可以画出箭头来显示这种合力,让学生了解正在发生的事情。

我挖掘了 Farseer 的源代码,发现了内部 Vector2 变量Force。由于它是内部的,我无法从我的教学平台访问它,因为它们位于不同的组件中。

如果我将修饰符更改为私有,并为其添加一个 getter 函数,会发生什么不好的事情吗?

或者

有没有更好的方法来获得当前作用在物体上的合力?

0 投票
1 回答
617 浏览

xna - Farseer 创建矩形宽度高度

基于Box2D的Farseer XNA4.0 C#物理引擎

如果我使用 BodyFactory.CreateRectangle(world, w, h, density, new Vector2(x, y)); 创建body的方法

我怎样才能从身体中恢复宽度和高度?

目前我正在保存宽度和高度,但我想知道是否可以从夹具或形状或其他东西中检索它。做了一些尝试,但没有成功。它会为我创建的每个实体节省两个浮点数。

谢谢你的帮助。

0 投票
1 回答
1952 浏览

c# - 概念检查器:Farseer 中的碰撞情况

我使用 Farseer 已经有一段时间了,正在做一个物理教学平台项目。我脑子里有几个关于引擎的问题在很长一段时间内都没有得到解答,其中许多是关于引擎的碰撞处理。

许多人似乎无法理解引擎的工作原理,部分原因是 Farseer 缺乏适当的 API。对于那些知道的人来说,确认以下概念并杀死任何错误的概念可能是一个好主意。

概念 0:两个阶段

Farseer中的碰撞分为两个阶段:

  1. 宽相碰撞
  2. 精确碰撞(请更正我对术语的使用,如果有另一个更正式的名称......)

概念 1:Broadphase

Farseer 使用广泛的相位碰撞,将在场景中发现潜在的碰撞。所述宽相碰撞测试由...

  1. 使用四叉树,可以在包“Farseer.Collision”中找到。

  2. “Farseer.Dynamics.World”类引用了“Farseer.Collision.QuadTreeBroadphase”。

  3. “Farseer.Collision.QuadTreeBroadphase”引用了“Farseer.Collision.QuadTree”。

  4. 还进行了进一步的边界框测试。

  5. 如果我们发现需要知道哪对固定装置有可能发生碰撞,我们可以这样做......

但是之后...

小问题1

有哪些常见情况有助于我们了解哪些设备对可能发生碰撞?

概念二:事件的意义

定义两个关键字:

  1. 接触:两个物体接触。数组 Manifold.Points不是空的。
  2. 碰撞:两个物体第一次接触。

BeforeCollision表示两个对象没有碰撞没有接触

OnCollision表示两个对象正在碰撞,但触摸不会触发此事件。

AfterCollision意味着两个物体正在碰撞,但现在它们只是接触

OnSeparation表示两个对象正在接触,但现在它们不是。

概念 3:使用事件

宽相碰撞测试和精确碰撞测试始终进行。

通过在事件OnCollision中返回 false或使用 IgnoreCollision 方法可以禁用精确碰撞。

我不止一次听到人们说“让 OnCollision 为空并返回 true”。这到底是什么意思?使用事件意味着我们希望在上述事件发生时应用额外的效果(例如杀死敌人、得分、播放声音等)。

0 投票
0 回答
1145 浏览

box2d - Farseer / Unity - 运动体和传感器

我正在使用 Unity 开发 Plattformer 游戏。我目前正在使用CatsInTheSky的 Farseer-Port :

我遇到了一些问题......是的,物理。我真的不想让游戏中的东西变得逼真,但我想使用 Farseer 的 CollisionDetection。

所以,我遵循了 Farseer-Unity-Tutorials 并给了我的角色一个盒子(BodyType:动态)。它的行为应如此:

  • 跌倒
  • 与地面相撞
  • 而且有点滑

然后我开始对 Farseer 和 Box2D 进行一些研究(有一些更有用的教程),因为我只想让我的角色移动,当我说他移动时,不要在地面上滑动或类似的东西。

我读了一些关于好方法的文章:Using Sensors for Collision Detection。

所以我在 Unity 中又制作了四个 GameObjects 并将它们称为 Back/Front/Foot/Head-Sensor,给它们一个 RevoluteJoint-Component 并将 PlayerObject 与这四个 GameObjects 绑定(它也有一个 Body-Component 并且标记为“Dynamic” -Bodies),我给了他们一个脚本,其中包含这样的 CodeLine:

所以它们根本不会发生碰撞(因为它们被标记为动态物体),但会发生碰撞。

现在我有点卡住了:/

我无法弄清楚如果我的 Player-Body 触地时如何准确地告诉他静止不动。

我尝试过这样的事情,但它根本不起作用:

(“速度”变量是一个全局变量,我在其中放置了我的播放器的 Body.LinearVelocity-Information)

然后我将我的 Player-Body 更改为 Kinematic-Body 知道它根本不会浮动或碰撞,直到我想要这样。所以重力也完全不会影响它。

我只想让我的传感器告诉我,如果我被接地,如果是,我应该留在这个地面上。

如果有人可以提供帮助,真的会很感激吗?

(如果其他人正在使用该 Unity-Port,我很想知道如何访问 Farseer ContactListener。)

0 投票
0 回答
60 浏览

c# - 物理助手xaml revolve

我是初学者,所以请多多包涵。我正在使用物理帮助程序 XAML 库 ( Farseer ) 在我的应用程序中使用物理。

目前,我遇到以下问题

  1. 有一个物体,特别是一个三角形,围绕一个点旋转,同时它的顶点指向圆形关节。

  2. 同样在我让三角形旋转(没有顶点指向)后,当它达到角速度时0.016,对象开始抖动很多。

请问有人可以帮我解决这个问题吗?在这背后花了这么多小时后,我处于理智的边缘。看起来并且应该相当简单,但是却避开了我

0 投票
1 回答
521 浏览

box2d - IgnoreCCD = false 时用 AfterCollision/NormalImpulse 计算碰撞力不可靠?

我在一个非常简单的 XNA 4 测试游戏中使用 Farseer Physics Engine 3.3.1。(注意:我也标记了这个 Box2D,因为 Farseer 是 Box2D 的直接端口,我很乐意接受解决这个问题的 Box2D 答案。)

在这个游戏中,我创造了两个身体。第一个主体是使用BodyFactory.CreateCircleand创建的BodyType.Dynamic。可以使用键盘(设置 Body.LinearVelocity)来移动这个身体。第二个主体是使用BodyFactory.CreateRectangleand创建的BodyType.Static。这个身体是静止的,从不移动。

然后我使用这段代码来计算两个物体碰撞时的碰撞力:

如果这两个主体都设置为IgnoreCCD=true. 我可以 100% 可靠地计算出它们之间的碰撞力。完美的。

但问题是:如果我将主体设置为 IgnoreCCD=false,那么该代码将变得非常不可预测。AfterCollision 被可靠地调用,但由于某种原因,NormalImpulse 大约有 75% 的时间为0,因此仅记录了大约四分之一的碰撞。更糟糕的是,由于完全随机的原因,NormalImpulse 似乎为零。动态物体可以以几乎完全相同的方式连续 10 次与静态物体碰撞,并且只有 2 或 3 次碰撞会记录到大于零的 NormalImpulse。在两个身体上设置IgnoreCCD=true立即解决了问题,但随后我失去了连续的物理检测。

为什么会发生这种情况,我该如何解决?


这是一个简单的 XNA 4 解决方案的链接,该解决方案演示了这个问题的实际效果: http ://www.mediafire.com/?a1w242q9sna54j4

0 投票
1 回答
470 浏览

c# - XNA 中让玩家在屏幕上平滑绘制的最佳方法是什么?

我正在开发一个 wp7 游戏,玩家在程序中画线并且球从它们身上反弹。我正在使用 XNA 和 farseer 物理。用户画一条线,然后程序将其转换为物理对象或至少是 vector2s 列表的最佳方法是什么?我已经尝试创建一个 TouchLocations 列表,但如果用户绘制的速度不是很慢,它最终会变得参差不齐,就像我附上的图片一样。有什么建议么?谢谢 http://img829.imageshack.us/img829/3985/capturehbn.png

这是一些代码:我正在使用游戏状态管理示例,这是在 HandleInput 方法中

pathManager 类管理路径类的集合,它们是可绘制的物理对象。这是 pathManager.Update

这正是我现在正在做的事情,我愿意为了任何事情把它扔掉。你会认为每个触摸位置都有一个 5x5 的矩形会影响性能,但使用 farseer 我没有看到任何下降,即使大部分是全屏。但是,如果线条绘制得很快,该系统根本不会创建平滑的线条。

我怀疑这有什么帮助,但这里是 Path 构造函数。

0 投票
1 回答
245 浏览

c# - 身体在重力作用下不旋转面朝下

我有一个长方形的身体,正以 45 度角从佳能发射。身体也向上旋转了 45 度角,我将质量设置在身体的前部。

身体在空中很好,然而,当身体回到地面时,它不会旋转。有没有办法让大众先下来?

我在现实世界中的例子是,将一个带有绳子的网球扔到空中。目前,当重力生效时,绳子不会落在球后面。

这是我的“球”

然后我这样做来解雇它:

我猜我忘记了一些设置或计算。

0 投票
1 回答
842 浏览

c# - Farseer Physics 对象并没有完全接触

我刚刚开始使用Farseer Physics,并且创建了一个快速/粗略的基础对象,可以用来轻松创建对象。

所以我设置了一个快速模拟,它看起来像这样:盒子不碰撞的更远的例子

在 DebugView 中,它看起来像这样:Farseer 调试模式下的盒子示例

经过仔细检查,在启用这两种模式的情况下,我可以看到橙色框缺少一行和一列像素:纹理上缺少像素

有谁知道为什么会这样?

有谁知道为什么会这样?在所有的 Farseer 演示中都没有这样做。我检查了纹理,它没有不可见pixels的橙色pixels填充整个文件。