远观米/像素比

本文关键字:像素 远观 | 更新日期: 2023-09-27 18:11:04

我已经在c++中做了很多box2d,并且正在尝试c#。看起来Farseer通常被用来代替Box2D(我知道Box2DXNA,但它似乎有点过时了)。我一直用的是法见。当我使用c++和Box2D时,每个人都建议不要使用1像素/米的比例(出于什么原因,我不知道),通常建议使用30像素/米左右的比例。我一直在研究法先见,我看到了很多相互矛盾的说法。有人说用1像素/米,有人说用刻度,还有人说用ConvertUnits。ToSimUnits和ConvertUnits。ToDisplayUnits等。

那么我应该用什么呢?现在,我正在使用ConvertUnits,但所有东西都在奇怪的地方呈现。有没有什么事实上的标准或我应该遵循的东西?

远观米/像素比

x基于Box2D。Box2D常见问题解答说:

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,另见)。

在我看来,Farseer ConvertUnits类是处理转换的一种非常丑陋的方式。

我使用int MetersPixel = 64;为我所有的基础计算。所以我有一个小敌人,他们的纹理是16px宽。所以当用Farseer创建他们的身体时,宽度是0.25。

16/64 = 0.25

最重要的是,感觉,大小/比例和重量都适合我目前的游戏,我不相信有什么黄金法则或理由让你为了让你的代码10 = 1而跳过圈。

到目前为止,它对我来说工作得很好。我从来没有想过将10px转换为1m,但以我目前的游戏构建,我认为这并不有用。