【问题标题】:MonoGame - Tiling Texture2D with SpriteBatch on iOSMonoGame - 在 iOS 上使用 SpriteBatch 平铺 Texture2D
【发布时间】:2011-11-14 22:27:03
【问题描述】:

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

我在阅读时发现,可以通过一个 SpriteBatch.Draw 调用来平铺使用两种纹理(宽度和高度上的 2、4、8、16、32 等)的幂。

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

我试了几次,不管怎样,它只是拉伸图像而不是平铺。

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

【问题讨论】:

  • 你提供给draw方法的源矩形是什么?你说它拉伸了图像......听起来你提供了一个包含整个图像的矩形。
  • 我很快就会在这里尝试一下。一个问题是,我们使用的图像条也是平铺的(雨效果)。这可能不会协同工作,对吧?它需要在 X/Y 方向平铺,并有 4 帧通过在图像条上移动源矩形来模拟降雨。我想我们必须为每一帧使用不​​同的 Texture2D,对吧? (假设源矩形的大小适合我)
  • 我认为我的问题是这里的 XNA 样本:msdn.microsoft.com/en-us/library/… 没有很好地解释源矩形,@dowhilefor,发布答案,我会将其标记为已接受。 (可能会详细说明如何同时使用图像条进行平铺和动画处理)

标签: c# .net ios xamarin.ios monogame


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-23
    • 1970-01-01
    • 2014-11-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多