问题标签 [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.
box2d - Farseer/Box2D - 将旋转关节(或其他)的旋转约束到一个方向?
我正在尝试在 Farseer(基于 Box2D)中创建一台机器,该机器需要使用单向轴承,以便重物仅沿逆时针方向围绕一个点旋转。
我使用 Revolute 关节连接了重量,除此问题外一切正常。我需要重物上的重力仍然影响机器。所以它应该摆动出来,并且不能在运动的物理特性仍然存在的情况下摆动回来。
如果有人对我如何实现这一点有任何想法,我将不胜感激。
c# - 获取作用在身体上的力
由于我正在构建物理教学平台,因此我需要知道此刻作用在物体上的总力。这样,我可以画出箭头来显示这种合力,让学生了解正在发生的事情。
我挖掘了 Farseer 的源代码,发现了内部 Vector2 变量Force。由于它是内部的,我无法从我的教学平台访问它,因为它们位于不同的组件中。
如果我将修饰符更改为私有,并为其添加一个 getter 函数,会发生什么不好的事情吗?
或者
有没有更好的方法来获得当前作用在物体上的合力?
xna - Farseer 创建矩形宽度高度
基于Box2D的Farseer XNA4.0 C#物理引擎
如果我使用 BodyFactory.CreateRectangle(world, w, h, density, new Vector2(x, y)); 创建body的方法
我怎样才能从身体中恢复宽度和高度?
目前我正在保存宽度和高度,但我想知道是否可以从夹具或形状或其他东西中检索它。做了一些尝试,但没有成功。它会为我创建的每个实体节省两个浮点数。
谢谢你的帮助。
c# - 概念检查器:Farseer 中的碰撞情况
我使用 Farseer 已经有一段时间了,正在做一个物理教学平台项目。我脑子里有几个关于引擎的问题在很长一段时间内都没有得到解答,其中许多是关于引擎的碰撞处理。
许多人似乎无法理解引擎的工作原理,部分原因是 Farseer 缺乏适当的 API。对于那些知道的人来说,确认以下概念并杀死任何错误的概念可能是一个好主意。
概念 0:两个阶段
Farseer中的碰撞分为两个阶段:
- 宽相碰撞
- 精确碰撞(请更正我对术语的使用,如果有另一个更正式的名称......)
概念 1:Broadphase
Farseer 使用广泛的相位碰撞,将在场景中发现潜在的碰撞。所述宽相碰撞测试由...
使用四叉树,可以在包“Farseer.Collision”中找到。
“Farseer.Dynamics.World”类引用了“Farseer.Collision.QuadTreeBroadphase”。
“Farseer.Collision.QuadTreeBroadphase”引用了“Farseer.Collision.QuadTree”。
还进行了进一步的边界框测试。
如果我们发现需要知道哪对固定装置有可能发生碰撞,我们可以这样做......
但是之后...
小问题1
有哪些常见情况有助于我们了解哪些设备对可能发生碰撞?
概念二:事件的意义
定义两个关键字:
- 接触:两个物体接触。数组 Manifold.Points不是空的。
- 碰撞:两个物体第一次接触。
BeforeCollision表示两个对象没有碰撞也没有接触。
OnCollision表示两个对象正在碰撞,但触摸不会触发此事件。
AfterCollision意味着两个物体正在碰撞,但现在它们只是接触。
OnSeparation表示两个对象正在接触,但现在它们不是。
概念 3:使用事件
宽相碰撞测试和精确碰撞测试始终进行。
通过在事件OnCollision中返回 false或使用 IgnoreCollision 方法可以禁用精确碰撞。
我不止一次听到人们说“让 OnCollision 为空并返回 true”。这到底是什么意思?使用事件意味着我们希望在上述事件发生时应用额外的效果(例如杀死敌人、得分、播放声音等)。
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。)
c# - 物理助手xaml revolve
我是初学者,所以请多多包涵。我正在使用物理帮助程序 XAML 库 ( Farseer ) 在我的应用程序中使用物理。
目前,我遇到以下问题
有一个物体,特别是一个三角形,围绕一个点旋转,同时它的顶点指向圆形关节。
同样在我让三角形旋转(没有顶点指向)后,当它达到角速度时
0.016
,对象开始抖动很多。
请问有人可以帮我解决这个问题吗?在这背后花了这么多小时后,我处于理智的边缘。看起来并且应该相当简单,但是却避开了我
box2d - IgnoreCCD = false 时用 AfterCollision/NormalImpulse 计算碰撞力不可靠?
我在一个非常简单的 XNA 4 测试游戏中使用 Farseer Physics Engine 3.3.1。(注意:我也标记了这个 Box2D,因为 Farseer 是 Box2D 的直接端口,我很乐意接受解决这个问题的 Box2D 答案。)
在这个游戏中,我创造了两个身体。第一个主体是使用BodyFactory.CreateCircle
and创建的BodyType.Dynamic
。可以使用键盘(设置 Body.LinearVelocity)来移动这个身体。第二个主体是使用BodyFactory.CreateRectangle
and创建的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
c# - XNA 中让玩家在屏幕上平滑绘制的最佳方法是什么?
我正在开发一个 wp7 游戏,玩家在程序中画线并且球从它们身上反弹。我正在使用 XNA 和 farseer 物理。用户画一条线,然后程序将其转换为物理对象或至少是 vector2s 列表的最佳方法是什么?我已经尝试创建一个 TouchLocations 列表,但如果用户绘制的速度不是很慢,它最终会变得参差不齐,就像我附上的图片一样。有什么建议么?谢谢 http://img829.imageshack.us/img829/3985/capturehbn.png
这是一些代码:我正在使用游戏状态管理示例,这是在 HandleInput 方法中
pathManager 类管理路径类的集合,它们是可绘制的物理对象。这是 pathManager.Update
这正是我现在正在做的事情,我愿意为了任何事情把它扔掉。你会认为每个触摸位置都有一个 5x5 的矩形会影响性能,但使用 farseer 我没有看到任何下降,即使大部分是全屏。但是,如果线条绘制得很快,该系统根本不会创建平滑的线条。
我怀疑这有什么帮助,但这里是 Path 构造函数。
c# - 身体在重力作用下不旋转面朝下
我有一个长方形的身体,正以 45 度角从佳能发射。身体也向上旋转了 45 度角,我将质量设置在身体的前部。
身体在空中很好,然而,当身体回到地面时,它不会旋转。有没有办法让大众先下来?
我在现实世界中的例子是,将一个带有绳子的网球扔到空中。目前,当重力生效时,绳子不会落在球后面。
这是我的“球”
然后我这样做来解雇它:
我猜我忘记了一些设置或计算。
c# - Farseer Physics 对象并没有完全接触
我刚刚开始使用Farseer Physics,并且创建了一个快速/粗略的基础对象,可以用来轻松创建对象。
所以我设置了一个快速模拟,它看起来像这样:
在 DebugView 中,它看起来像这样:
经过仔细检查,在启用这两种模式的情况下,我可以看到橙色框缺少一行和一列像素:
有谁知道为什么会这样?
有谁知道为什么会这样?在所有的 Farseer 演示中都没有这样做。我检查了纹理,它没有不可见pixels
的橙色pixels
填充整个文件。