Avez-vous pensé à utiliser GetData
et SetData
?
Je viens d'écrire une méthode d'extension à des fins de test:
public static class TextureExtension
{
/// <summary>
/// Creates a new texture from an area of the texture.
/// </summary>
/// <param name="graphics">The current GraphicsDevice</param>
/// <param name="rect">The dimension you want to have</param>
/// <returns>The partial Texture.</returns>
public static Texture2D CreateTexture(this Texture2D src, GraphicsDevice graphics, Rectangle rect)
{
Texture2D tex = new Texture2D(graphics, rect.Width, rect.Height);
int count = rect.Width * rect.Height;
Color[] data = new Color[count];
src.GetData(0, rect, data, 0, count);
tex.SetData(data);
return tex;
}
}
Vous pouvez l'appeler comme ceci:
newTexture = sourceTexture.CreateTexture(GraphicsDevice, new Rectangle(50, 50, 100, 100));
Si vous voulez juste dessiner une partie de la texture, vous pouvez utilisez la surcharge SpriteBatch
comme domi1819 suggéré.
J'ai utilisé la solution sourceRectangle dans mon jeu, donc maintenant, je dessine actuellement le jeu de tuiles entier pour mon jeu sur chaque tuile, mais je le recadre avec sourceRectangle. – emil1000123