L'Utilisation D'Un Contenu.Load<> dans une classe/sous-classe
Je me demandais si il n'y a de toute façon d'utiliser le Contenu".Load<>" dans une classe qui n'est pas le jeu en lui-même, dire que je veux charger une texture à partir de l'intérieur de la classe, plutôt que d'envoyer la texture.
namespace ProjectGame1
{
public class Ship
{
public Texture2D texture;
public Ship()
{
this.texture = Content.Load<Texture2D>("ship");
}
}
}
C'est un exemple de ce que je suis en train de réaliser
OriginalL'auteur PeppeJ | 2011-03-22
Vous devez vous connecter pour publier un commentaire.
Vous avez juste besoin de passer votre content manager pour le Navire objet:
À partir de votre jeu de la classe, vous instanciez le Navire:
pourquoi ne pouvez-vous pas ?
Alors que cela fonctionne, il est probablement mieux (d'un point de vue de la conceptualisation) pour faire "Navire" une sous-classe de "DrawableGameComponent", comme indiqué dans les réponses.
quand je tape dans le "Contenu" ou "ce.Contenu" sur le instancier il n'est trouvée, elle ne s'affiche pas dans l' (à l'aide de la liste, si c'est ce que vous l'appelez).
Il est appelé "IntelliSense"
OriginalL'auteur JoDG
Tout d'abord, je vous recommande de pas à l'aide de DrawableGameComponent, mon raisonnement pour ce qui est décrites dans la présente réponse ici.
Maintenant, pour faire de votre code de travail, vous devez passer un
ContentManager
dans le constructeur de la création (voir JoDG réponse). Mais pour ce faire vous devez construire après leContentManager
est prêt. PourGame
'gestionnaire de contenu, c'est pendant et aprèsLoadContent
être appelé (donc pas dans votre jeu du constructeur ouInitialize
méthode).Maintenant, vous pourriez faire quelque chose comme à l'aide de DrawableGameComponent, qui est beaucoup plus agréable: il suffit de donner votre
Ship
classe unLoadContent
méthode, et l'appeler à partir de votre jeuLoadContent
(comme vous le feriez pourDraw
etUpdate
).Si la texture de votre navire utilise ne fait pas partie de votre vaisseau de l'état (c'est à dire: tous les navires utilisent la même texture), vous pouvez même faire en statique, ce qui évite d'avoir à appeler
LoadContent
sur tous les navires que vous créez. J'ai un exemple de ceci est cette réponse ici, qui a également une liste d'autres informations utiles à propos du Gestionnaire de Contenu.DrawOrder
si vous n'utilisez pas leDrawableGameComponent
?Vous appelez les fonctions directement. Donc
player.Draw(); enemy.Draw();
devientenemy.Draw(); player.Draw();
. Simple.OriginalL'auteur Andrew Russell
Si la classe dériver forme
DrawableGameComponent
alors vous pouvez toujours utiliserGame.Content.Load<Texture2D>("ship");
il suffit de faire: "public Navire de la classe : DrawableGameComponent"
OriginalL'auteur Paweł Smejda
Afin d'obtenir que cela fonctionne, vous aurez besoin d'un
Constructor
qui accepte un paramètre de typeGame
. Cela signifie que vous aurez besoin d'ajouter une référence àMicrosoft.Xna.Framework.Game
.Notez que, pour avoir le LoadContent() remplacer appelé, le Navire objet doit être ajouté au Jeu.Les composants (c'est à dire, dans le Navire de constructeur, "le Jeu.Des composants.Add(this);").
OriginalL'auteur Neil Knight
Je pense que vous aurez besoin d'une référence à l'objet de Jeu pour obtenir son
Content
membre. Ce pourrait être soit passé ou vous pourrait rendre le jeu un Singleton.OriginalL'auteur Ed Marty
Bon j'ai résolu, j'ai utilisé une autre méthode, car la vôtre n'a pas tout à fait comme je l'avais espérer.
Ce que j'ai fait a été de faire un "public static content manager tsa;" et puis assigné à la Jeu de content manager, puis il a travaillé en les redirigeant vers "Game1.tsa
(Les noms de variables sont des exemples)
OriginalL'auteur PeppeJ