Die Verwendung Von Inhalten.Laden Sie<> eine Klasse/Unterklasse
Frage ich mich, ob es trotzdem zu verwenden, die "Content.Laden Sie<>" in einer Klasse, dass ist nicht das Spiel selbst, sagen, ich soll zum laden einer textur aus der Klasse, anstatt die textur zu.
namespace ProjectGame1
{
public class Ship
{
public Texture2D texture;
public Ship()
{
this.texture = Content.Load<Texture2D>("ship");
}
}
}
Das ist ein Beispiel, was ich versuche zu erreichen
InformationsquelleAutor PeppeJ | 2011-03-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Brauchen Sie nur Ihren pass ContentManager-für das Schiff-Objekt:
Aus Ihrer Spiel-Klasse, die Sie instanziieren das Schiff:
warum können Sie nicht ?
Während dies funktioniert, es ist wohl besser (von einer Konzeptualisierung Sicht) zu machen, "Schiff" eine Unterklasse von "DrawableGameComponent", wie es in einigen der anderen Antworten.
wenn ich in "Content" oder "dies.Inhalt" auf der instanziert ist, wo keine zu finden, es nicht zeigen, bis in den (Hilfe-Liste, wenn es das ist, was Sie es nennen).
Es nennt sich "IntelliSense"
InformationsquelleAutor JoDG
Erste von allen, ich empfehle nicht Verwendung von DrawableGameComponent, dass meine Argumentation für diese ist gemäß dieser Antwort hier.
Nun, um Ihren code zu funktionieren, müssen Sie passieren eine
ContentManager
in den Konstruktor, den Sie erstellen (siehe JoDG Antwort). Aber um dies zu tun, müssen Sie nur bauen es nach derContentManager
bereit ist. FürGame
's content-manager, dieser ist während und nachLoadContent
aufgerufen wird (also nicht in Ihr Spiel Konstruktor oderInitialize
- Methode).Nun, Sie könnten etwas tun wie Verwendung von DrawableGameComponent, die ist viel schöner: geben Sie Einfach Ihren
Ship
Klasse aLoadContent
- Methode, und rufen Sie die von Ihrem SpielLoadContent
(wie würden Sie fürDraw
undUpdate
).Wenn die textur, die Ihr Schiff nutzt, ist nicht Teil des Schiffes, der Staat (sprich: alle Schiffe, die verwenden die gleiche textur), könnte man sogar statische, sparen Sie mit call -
LoadContent
auf jedem Schiff, das Sie erstellen. Ich habe ein Beispiel HIERFÜR ist diese Antwort hier, die auch eine Liste der anderen nützliche Informationen über den Content Manager.DrawOrder
wenn Sie nicht mit denDrawableGameComponent
?Rufen Sie die Funktionen direkt. So
player.Draw(); enemy.Draw();
wirdenemy.Draw(); player.Draw();
. Einfach.InformationsquelleAutor Andrew Russell
Wenn die Klasse abzuleiten form
DrawableGameComponent
dann können Sie weiterhin verwendenGame.Content.Load<Texture2D>("ship");
einfach machen: "public class Schiff : DrawableGameComponent"
InformationsquelleAutor Paweł Smejda
Um diese zu arbeiten, müssen Sie eine
Constructor
akzeptiert einen parameter vom TypGame
. Dies wird bedeuten, dass Sie brauchen, um einen Verweis hinzuzufügenMicrosoft.Xna.Framework.Game
.Beachten Sie, dass, um die LoadContent () - überschreibung aufgerufen, das Schiff-Objekt Hinzugefügt werden muss-Spiel.Komponenten (d.h. in das Schiff Konstruktor " - Spiel.Komponenten.Add(this);").
InformationsquelleAutor Neil Knight
Ich denke, Sie benötigen eine Referenz auf die Game-Objekt, um seine
Content
Mitglied. Dies kann entweder bestanden werden oder man könnte machen das Spiel zu einem Singleton.InformationsquelleAutor Ed Marty
Okay ich habe es gelöst, ich verwendet eine andere Methode, da deins nicht ganz so funktioniert, wie ich es erwarten würde.
Was ich Tat, war eine "public static ContentManager-asd;" und dann zugeordnet Spiels ContentManager, und dann hat es geklappt dass es zu "Game1.asd
(Variablen-Namen sind Beispiele)
InformationsquelleAutor PeppeJ