我已经在c++中使用box2d做了很多工作,并且正在尝试使用C#。看起来Farseer通常被用来代替Box2D (我知道Box2DXNA,但它似乎有点过时)。所以,Farseer就是我一直使用的。当我使用C++和Box2D时,每个人都建议不要使用1像素/米的比例(出于什么原因,我不知道),通常建议使用大约30像素/米的比例。在我研究Farseer的过程中,我看到了很多相互矛盾的说法。一些人说使用1像素/米,另一些人说使用刻度,其他人说使用ConvertUnits.ToSimUnits和ConvertUnits.ToDisplayUnits等。
那么我应该使用什么呢?现在,我正在使用ConvertUnits,但是所有的东西都呈现在奇怪的地方。有没有什么事实上的标准或者我应该遵循的东西?提前谢谢。
发布于 2011-10-12 15:31:07
Farseer3.x是基于Box2D的。和Box2D FAQ says
Box2D针对米-公斤-秒(MKS)进行了调整。你移动的物体应该在0.1 - 10米之间。不要以像素为单位!你会得到一个抖动的模拟。
换句话说,假设一个“正常”的物理世界,你可能应该有1个物理单位= 1m。但是,任何导致大多数移动对象在0.1到10个单位范围内的缩放都应该是可以的。
所以,假设你正在制作一个汽车模型。一个非常非常简单的模型,恰好是一个矩形。您可以使用类似于以下内容的内容创建它:
float width = 4.1f; // average car length in meters
float height = 1.4f; // average car height in meters
// Note: this method takes half-sizes:
var carVertices = PolygonTools.CreateRectangle(width / 2f, height / 2f);
// Then pass carVertices into PolygonShape, etc...另一个问题是如何以正确的大小渲染世界。
通常在渲染时使用摄影机或视图矩阵(在标准世界/视图/投影系统中)来完成此操作。可以这样做的两个地方是BasicEffect.View (MSDN),或者SpriteBatch.Begin的转换矩阵参数(MSDN,see also)。
在国际海事组织中,Farseer ConvertUnits类是一种非常丑陋的转换处理方式。
发布于 2011-10-14 17:27:01
对于我所有的基本计算,我使用int MetersPixel = 64;。所以我有一些小敌人,他们的纹理是16px宽。因此,当使用Farseer创建它们的身体时,宽度为0.25。
16 / 64 = 0.25
最重要的是感觉,大小/比例和重量都适合我现在的游戏,我不相信有什么金科玉律或者理由让你的代码10 =1等等。
到目前为止,它对我来说工作得很好。我从来没有想过要将10px转换成1m,但以我目前的游戏版本,我不会认为这是有用的。
https://stackoverflow.com/questions/7733088
复制相似问题