3

现在,我正在用 2 个 for 循环平铺 Texture2D,类似于MonoGame 示例中的示例

我正在阅读,我看到使用两个纹理(宽度和高度上的 2、4、8、16、32 等)的力量可以通过一个 SpriteBatch.Draw 调用来平铺。

iOS 上的 MonoGame 是否支持此功能?

我给了它几次尝试,无论如何它只是拉伸图像而不是平铺它。

我在我的 SpriteBatch.Begin() 上使用 SamplerState.LinearWrap,并尝试使用 2048x128 png 并在 512x32 上尝试了 1/4 大小,但没有运气。(使用大尺寸,b/c 我们的游戏以 2400x 运行,有些东西缩小了,b/c 你可以用相机放大 2.5 倍)

4

1 回答 1

2

您可以在draw 方法中使用 SourceRectangle 参数。定义要显示的纹理的哪一部分。假设您有一个 128x128 纹理。如果你提供Rect(0, 0, 128, 128)你告诉draw方法使用整个纹理,如果你传递null给draw方法也是一样的。如果您提供Rect(0, 0, 64, 64),您将使用纹理的左上部分。无论精灵本身有多大,您的精灵都会显示这部分。因此,如果您的精灵以 128x128 的大小绘制,则 64x64 纹理部分将被缩放。

现在您可以将其用于动画。如果您在纹理中存储这样的动画序列您只需在每次想要显示序列中的下一个图像时重新计算源矩形。

除此之外,您可以传递比源纹理更大的值。XNA 现在需​​要包裹或夹住您的纹理。这样您就可以实现简单的平铺。如果您需要的不仅仅是我的猜测是您需要使用手动方法,例如您的 foreach 循环。请注意,仅当您使用两种纹理的幂时才支持 Wrap。

于 2011-11-14T14:27:03.433 回答