2017-06-26 2 views

Répondre

0

La seule chose qui me vient à l'esprit est l'utilisation de Texture2D.FromStream(), mais qui lit un fichier image entier de sorte qu'il ne fonctionnera pas vraiment dans votre cas. Ce que j'ai fait pour un de mes jeux est de créer un wrapper autour de Texture2D qui dessine uniquement des parties spécifiques de la texture en utilisant une surcharge SpriteBatch.Draw() qui accepte les rectangles source et de destination.

+0

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

0

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é.

+0

J'ai utilisé la solution sourceRectangle dans mon jeu, donc en ce moment, je dessine actuellement le jeu de tiles entier pour mon jeu sur chaque tuile, mais je le recadre avec sourceRectangle. Merci pour cette solution si, si j'en ai besoin, je pourrais l'utiliser. – emil1000123