我的问题是我需要使用Texture2D来表示一个长度在变化的地板,这意味着一个侧面具有两侧图像的地板,并且在中间它重复相同的“中间”图像,如下所示:
要实现这一点,我得到'左边','中间'和'右边'纹理,问题是我不知道如何将它们合并为一个单一的texture2D,
在运行时这样做很重要,因为地板长度正在变化(水平), 我读过你可以使用SetData做到这一点,但我不知道如何......
对我来说非常重要的是它将作为一个纹理而不是多个纹理部分,因为我使用Farseer Physics Engine来移动地板并使用它。
我在Visual Studio 2010中使用C#和XNA,我是一位经验丰富的C#程序员,
谢谢!
答案 0 :(得分:2)
This answer可能会对您有所帮助。您应该使用HLSL来重复地板,或者您应该在RenderTarget上绘制地板并将其保存为单个纹理。请享用。
答案 1 :(得分:1)
首先,创建一个新的Texture2D作为地板纹理,指定适当的宽度和高度。然后,使用GetData method获取要合并的三个纹理的数据。最后,使用SetData method根据需要设置新纹理的数据(检查链接,可以指定起始索引)。
警告:GetData和SetData方法很慢。如果你只需要为每个游戏创建一次这个纹理(例如在初始化时),那么这不是问题。
答案 2 :(得分:1)
您正在使用farseer ......但它并不禁止您使用平铺方法......
我不知道更狡猾,但我想它提供了一个变换矩阵......
做的:
Vector2 pos = Vector2.Zero;
spriteBatch.Begin(...,....,...,..., Transform);
spriteBatch.Draw(LeftTexture, pos, null, Color.White);
pos.X += LeftTexture.Width;
for (int i=0; i<floor_repeats; i++)
{
spriteBatch.Draw(MidleTexture, pos , null, Color.White);
pos.X += MiddleTexture.Width;
}
spriteBatch.Draw(RightTexture, pos , null, Color.White);