gpt4 book ai didi

c# - Farseer 转换单元?

转载 作者:太空宇宙 更新时间:2023-11-03 18:14:11 25 4
gpt4 key购买 nike

在 FarseerPhysics 引擎/XNA 中,ConvertUnits.ToDisplayUnits(); 是什么? ?

最佳答案

Farseer(或者更确切地说,它源自 Box2D)经过调整,可以最好地处理重量范围为 0.1 到 10 个单位,尺寸(宽度或高度)为 0.1 到 10 个单位的对象。如果您使用超出此范围的对象,您的模拟可能不会像其他情况下那样稳定。

大多数情况下,这适用于您可能在游戏中找到的“常规”大小的对象(汽车、书籍等),以米和千克为单位。但是,这不是强制性的,实际上您可以选择任何比例。 (例如:涉及弹珠或飞机的游戏可能使用米/公斤以外的比例)。

大多数游戏都有不同的空间。例如:“模型”空间、“投影”空间、“ View ”空间、“世界”空间、“屏幕”空间、“客户端”空间。有些以像素为单位,有些以普通单位衡量。通常游戏使用矩阵将顶点从一个空间转换到另一个空间。最明显的是以单位衡量的世界,并将其显示在以像素为单位的屏幕上。

XNA的SpriteBatch默认情况下,通过让世界空间与客户空间相同,可以大大简化这一点。一个世界单位 = 一个像素。

通常你应该将你的世界空间定义为 相同 到你的物理世界所在的空间。但这在使用 SpriteBatch 时会出现问题。的默认空间 - 因为你不能有一个大于 10 像素的物理对象,而不超出 Farseer 调整的范围。

Farseer 的[1] 解决方案是拥有两个不同的世界空间——游戏空间和物理空间。并使用 ConvertUnits需要在这两个系统之间转换的任何地方的类。

我个人觉得这个解决方案非常糟糕,因为它非常容易出错(因为您必须在整个代码中的多个位置进行正确的转换)。

对于任何适度严肃的游戏开发工作,我建议使用统一的世界空间,根据 Farseer 的要求进行设计。然后使用全局变换到 SpriteBatch.Begin , 或完全不同于 SpriteBatch 的东西,将那个世界渲染到屏幕上。

但是,对于简单的演示,ConvertUnits做这项工作。它让你保持美好的SpriteBatch未缩放的 Sprite 纹理中的一个像素 = 屏幕上的一个像素的属性。

[1]:我上次检查时,ConvertUnits是 Farseer 样本的一部分,而不是物理库本身的一部分。

关于c# - Farseer 转换单元?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9506458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com