2010-10-08 2 views
3

Je travaille actuellement sur un couple de projets de Windows Phone (Bien que la question peut également convenir iphone/android) et il m'a fait penser, quel est le meilleur moment pour charger les textures du gestionnaire de contenu. Dans un premier temps, je les chargeais tous, de ma classe de base Game, et les transmettais selon les besoins. Rapidement malade de cela, j'ai créé une petite classe de gestionnaire de ressources, que je passe à tout ce qui l'exige. Donc, je pense que c'est peut-être le meilleur que je charge réellement la texture, quand une classe l'exige, et ensuite l'assigner à une variable, alors quand j'en ai besoin à nouveau - tout sera prêt à partir ... est-ce le meilleur moyen (efficace ?, le plus rapide?) pour gérer les ressources de chargement? Si non, comment recommanderiez-vous que j'y aille? Ne créez aucun type de classe "gestionnaire de ressources".Quand charger des textures?

Répondre

7

Il suffit de passer la classe XNA ContentManager autour (l'instance que vous obtenez de Game.Content).

Le gestionnaire de contenu par défaut traitera automatiquement la réutilisation des objets chargés pour vous. Donc, vous pouvez Content.Load<Texture2D>("something") à partir de plusieurs endroits et vous obtiendrez toujours le même instance de texture.

Donc, si vous avez un tas de classes pour vos objets de jeu, avec la conception standard de donner chacun un Update et une méthode que vous appelez à partir Draw les méthodes respectives dans Game - il suffit d'ajouter une autre méthode: LoadContent à ces classes, qui accepte un argument de ContentManager.

Vous pouvez appeler cette méthode à partir de la méthode LoadContent de votre jeu.

Si, par la suite, vous voulez mettre en œuvre une sorte de système de choses retard de chargement (par exemple: le contenu de chargement lors de la modification des niveaux), vous pouvez également appeler vos cours de jeu de la méthode LoadContent de votre méthode de jeu Update (mais gardez en gardant à l'esprit que le chargement du contenu est lent - vous pourriez donc vouloir lancer un écran de «chargement»).

Décharger le contenu est un peu plus délicat. Tout ce que vous créez vous-même, vous devez décharger. Mais tout ce qui est chargé depuis un ContentManager (parce que les instances sont partagées) ne doit être déchargé que par ce gestionnaire de contenu (Game va gérer le déchargement de son membre Content quand il le faut). Vous pouvez trouver this blog post dignes d'être lues.

+0

Est-ce que le passage de la classe contentManager serait préférable à l'appel de GameState.Instance.LoadTexture2D ("Texture")? – Tim

+0

Ai-je raison de penser que GameState est un singleton? Ce n'est pas * terrible *, mais j'ai trouvé que le fait de contourner ContentManager est plus flexible à long terme. De plus, je ne m'embêterais même pas avec le singleton - si vous voulez suivre cette route - il suffit de le rendre public static et de le gérer en l'initialisant dans votre classe Game. (Ceci est ma réponse de développement de jeu - la réponse d'ingénierie logicielle appropriée est simplement: "Oui!") –

Questions connexes