MonoGame - 在 iOS 上使用 SpriteBatch 平铺 Texture2D

发布于 2024-12-15 10:34:41 字数 495 浏览 3 评论 0原文

现在,我正在使用 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 倍)

Right now I'm tiling a Texture2D with 2 for-loops similar to an example from the MonoGame samples.

I was doing some reading, and I was seeing that using power of two textures (2, 4, 8, 16, 32, etc. on width & height) can be tiled with one SpriteBatch.Draw call.

Is this supported with MonoGame on iOS?

I gave it several tries, and no matter what it merely stretches the image instead of tiling it.

I am using SamplerState.LinearWrap on my SpriteBatch.Begin(), and tried using a 2048x128 png and tried it 1/4 size at 512x32, but with no luck. (Using large sizes, b/c our game runs at 2400xSomething zoomed out, b/c you can zoom in with the camera by 2.5 multiplication)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

雨夜星沙 2024-12-22 10:34:41

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

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

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

You can use the SourceRectangle parameter in the draw method. To define what part of the Texture you want to display. Lets say you have a 128x128 Texture. If you supply Rect(0, 0, 128, 128) you tell the draw method to use the whole texture, the same if you would pass null to the draw method. If you supply Rect(0, 0, 64, 64) you would use the upper left part of the texture. Your sprite will display this portion, no matter how big the sprite itself is. So if your sprite is drawn with the size of 128x128 the 64x64 texture part would be scaled.

Now you can use that for animations. If you store in your texture a sequence of animation like this, you just need to recalc the source rectangle everytime you want to display the next image in your sequence.

Besides that, you could pass in a bigger value, than your source texture. XNA now needs to wrap or clamp your texture. That way you can achieve a simple tiling. If you need more than that my guess is you need to use a manual approach, like your foreach loops.
Please note that Wrap is only supported if you use power of two textures.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文