我想使用我自己的单位“系统”。1 像素之类的东西等于 0.01 单位。
现在,当我想用自己的 Unitsystem 绘制一些东西时,我总是必须将值乘以/除以 100。我找到了一些提到在 SpriteBatch.Begin 中使用矩阵的答案,但我不知道如何。
有人可以帮我吗^^?
我想使用我自己的单位“系统”。1 像素之类的东西等于 0.01 单位。
现在,当我想用自己的 Unitsystem 绘制一些东西时,我总是必须将值乘以/除以 100。我找到了一些提到在 SpriteBatch.Begin 中使用矩阵的答案,但我不知道如何。
有人可以帮我吗^^?
Spritebatch.Begin() 的最后一个参数可以是变换矩阵。
TransformMatrix = Matrix.CreateScale(0.01);
spriteBatch.Begin(SpriteSortMode.Immediate, null, null, null, null, null, TransformMatrix);
Farseer Physics 为ConvertUnits
这类事情提供了一个类。根据记忆,您感兴趣的方法是ToSimUnits
和ToDisplayUnits
。Farseer 文档是这样描述的:
// 1 meter = 64 pixels
ConvertUnits.SetDisplayUnitToSimUnitRatio(64f);
// If you object is 512 pixels wide and 128 pixels high:
float width = ConvertUnits.ToSimUnits(512f) // 8 meters
float height = ConvertUnits.ToSimUnits(128f) // 2 meters
所以规则是:
- 每当您需要向引擎输入像素时,您需要先将数字转换为米。
- 每当您从引擎中获取一个值并将其绘制在屏幕上时,您都需要先将其转换为像素。
如果您遵循这些简单的规则,您将获得稳定的物理模拟。
在相关主题上,您应该研究解决方案独立性。