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
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.
- 1. Est-ce correct de charger des textures openGL comme ça?
- 2. Comment utiliser des textures compressées sur iPhone?
- 3. Problème d'utilisation des textures PVRTC
- 4. Barre de progression DirectX 9 «Chargement des textures»
- 5. XNA .Fbx textures
- 6. Quel est un bon moyen de charger des textures de manière dynamique dans OpenGL?
- 7. IDirect3DDevice9, réglage de l'échelle des textures?
- 8. Dois-je supprimer des textures dans GLSurfaceView?
- 9. glBlendFunc() avec des textures RGBA 32 bits
- 10. Comment créer des textures dans GPU
- 11. Swing I18N: Quand charger les propriétés?
- 12. Comment mettre des textures dans un fichier (puissance de 2)
- 13. OpenGL - Textures chargement incorrectement
- 14. OpenGL ES iPhone Textures
- 15. Chargement des textures dans une application Android OpenGL ES
- 16. iPhone OpenGL: textures de carrelage
- 17. textures o3d et transparence
- 18. C++ textures directx muliti
- 19. Chargement des textures à l'aide de TextureLoader à partir des ressources
- 20. OpenGL: textures déformées quand elles ne sont pas divisibles par 2
- 21. Comment papervision3d transforme les textures?
- 22. Conseil sur le chargeur d'images OpenGL multiplateforme pour les textures
- 23. Planètes procédurales, Heightmaps et textures
- 24. Charger dynamiquement des fichiers Javascript et charger des événements d'achèvement
- 25. Combiner deux textures en une
- 26. Question de gestion/pointeur de textures
- 27. Répétition de textures dans OpenGL
- 28. textures et tableaux de vertex avec OpenGL?
- 29. Textures PVRTC sur iPhone Simulator
- 30. Est-il possible d'utiliser des textures PVRTVC dans UIImages?
Est-ce que le passage de la classe contentManager serait préférable à l'appel de GameState.Instance.LoadTexture2D ("Texture")? – Tim
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!") –