2011-11-13 40 views
3

现在我正在用2个for-loops平铺一个Texture2D,类似于MonoGame samples的示例。MonoGame - 在iOS上贴图Texture2D与SpriteBatch

我正在做一些阅读,并且我看到使用两个纹理(2,4,8,16,32等宽度为&高度)的功率可以用一个SpriteBatch.Draw调用进行平铺。

iOS支持MonoGame吗?

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

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

+1

你提供给绘制方法的源矩形是什么?你说它拉伸了图像...这听起来像你提供了一个包含整个图像的矩形。 – dowhilefor

+0

我很快就会在这里尝试一下。一个问题是,我们使用了也是平铺的图像条(雨效应)。这可能不会一起工作,对吧?它需要在X/Y方向上平铺,并且有4个框架通过在图像条上移动源矩形来模拟降雨。我想我们必须为每个帧使用不同的Texture2D,对吧? (假设确定源矩形的大小适用于我) – jonathanpeppers

+0

我认为我的问题是这里的XNA示例:http://msdn.microsoft.com/en-us/library/bb975153(v=xnagamestudio.30).aspx did not很好地解释源矩形,@dowhilefor,发布答案,我会将其标记为已接受。 (可能会详细说明如何在同一时间使用图像条进行平铺和动画) – jonathanpeppers

回答

2

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

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

除此之外,您可以传递比源纹理更大的值。 XNA现在需要包装或夹紧你的纹理。这样你就可以实现简单的平铺。如果你需要的不仅仅是我的猜测,你需要使用手动方法,比如你的foreach循环。 请注意,只有在使用两种纹理强度的情况下才支持包裹。