Frage Player-Klasse mit meinem C # XNA-Spiel


Normalerweise würde ich Hilfe in den XNA-Foren suchen, aber sie sind im Moment nicht erreichbar, also bin ich hergekommen.

Ich mache ein neues XNA-Spiel und möchte eine Spielerklasse haben. Im Moment habe ich eine Hauptspielklasse genannt Dots. Dies ist das Hauptspiel. So ist mein Player Klasse ist im Moment angelegt:

namespace Dots
{
    class Player : Microsoft.Xna.Framework.Game
    {
        Texture2D PlayerTexture;
        Vector2 PlayerPosition;

        public Player()
        {
            Content.RootDirectory = "Content";
            PlayerTexture = Content.Load<Texture2D>("Player");
            PlayerPosition = Vector2.Zero;
        }

        public void Update()
        {

        }

        public void Draw(SpriteBatch SpriteBatch)
        {

        }
    }
}

Aber ich bekomme einen Fehler, den ich nicht lösen kann. Der Fehler ist:

Fehler beim Laden von "Player". Grafikgerät   Komponente nicht gefunden.

Es wirft es auf diese Linie: PlayerTexture = Content.Load<Texture2D>("Player");.

Ich sehe in der Hauptspielklasse diese Zeile: Graphics = new GraphicsDeviceManager(this); aber ich habe keine Ahnung was ich damit anfangen soll. Übergebe ich es an meine Player Klasse oder was?

Jede Hilfe wird geschätzt, danke.


5
2017-10-08 19:43


Ursprung


Antworten:


UPDATE: Diese Antwort ist anscheinend korrekt für ältere Versionen von XNA. Sehen Andrew Russells Antwort für das, was gerade benutzt wird.

Versuchen Sie, die LoadGraphicsContent-Methode zu überschreiben, um Ihren Inhalt zu laden. Wie gezeigt in dieses Tutorial.

    protected override void LoadGraphicsContent(bool loadAllContent)
    {
        if (loadAllContent)
        {
            spriteBatch = new SpriteBatch(graphics.GraphicsDevice);
            // TODO: Load any ResourceManagementMode.Automatic content
            t2dMap = content.Load<Texture2D>(@"content\textures\map_display");
            t2dColorKey = content.Load<Texture2D>(@"content\textures\map_colorkey");
        }
        // TODO: Load any ResourceManagementMode.Manual content
    }

2
2017-10-08 20:18



Zunächst einmal scheint es Ihnen zu fehlen, zu verstehen, wie Klassen (und Namensräume) funktionieren. Ich würde vorschlagen (wie ich auch in einem Kommentar zu Ihrer anderen Frage getan habe), zuerst an einem einfachen Spiel zu arbeiten, das keine Klassen benötigt.

Jetzt, um über die Probleme in Ihrem Code zu sprechen:

Um Inhalte zu laden, muss zunächst das Grafikgerät initialisiert worden sein. Es wird erst initialisiert LoadContent wird gerufen Microsoft.Xna.Framework.Game. Das ist erklärt in der Dokumentation:

Diese Methode wird von Initialize aufgerufen. Außerdem wird es jedes Mal aufgerufen, wenn der Inhalt des Spiels neu geladen werden muss, beispielsweise wenn das Ereignis DeviceReset auftritt. Sie sollten nicht auf das GraphicsDevice zugreifen, bis LoadContent aufgerufen wird.

Also verschiebe deinen Ladecode:

protected override void LoadContent()
{
    PlayerTexture = Content.Load<Texture2D>("Player");
    PlayerPosition = Vector2.Zero;
    base.LoadContent();
}

Beachten Sie, wie es ist überschreiben (einer geschützten Methode). Ich möchte nicht wirklich erklären, was das hier bedeutet, aber ich schlage vor, dass Sie es herausfinden.

Darüber hinaus wirst du das finden Draw und Update sollen in ähnlicher Weise überschrieben werden, da sie von XNA aufgerufen werden.

Nun, hier ist das wichtige Teil: Was ich Ihnen gerade gesagt habe, gilt, wenn Sie Ihr Erbe erben Spielklasse von der XNA Game Klasse. Wenn Sie es "Player" nennen, geben Sie ein Missverständnis darüber an, wie Klassen funktionieren.

Wenn Sie eine "Player" -Klasse erstellen, schauen Sie sich an, was Sie in der Antwort darauf gesagt haben deine andere Frage.

Sie können auch finden diese letzte Frage lesenswert.


6
2017-10-09 16:31



Kürzlich in XNA können Sie nun mit der rechten Maustaste auf bestimmte Optionen klicken und Intellisense es für Sie reparieren lassen. Wenn Sie also bei der Deklaration mit der rechten Maustaste auf Texture2D und Rectangle klicken, sollten Sie in der Lage sein, "Resolve" zu wählen und Sie werden aufgefordert, "using" mit einer anderen Bibliothek zu wählen, damit diese dann kompiliert werden kann. Sehen Sie, ob das Ihr Problem behebt. Aber im Allgemeinen benutze ich dies besonders bei Klassen und es funktioniert gut.


1
2018-05-24 18:09



Eine Checkliste dessen, was bei mir funktioniert hat:

  • Versuchen Sie, die Schriftart in den Stammordner Ihres Content-Projekts zu setzen
  • Stellen Sie sicher, dass Build Action ist eingestellt auf Compile
  • Überprüfen Sie den Inhalt des .spritefont Datei (verwende diese Frage als Referenz)
  • Stellen Sie sicher, dass Sie drin sind LoadContent oder später im Lebenszyklus

0
2017-11-20 11:24



Denke ich hatte einmal einen ähnlichen Fehler.

Klicken Sie mit der rechten Maustaste auf die Lösung im Projektmappen-Explorer.

Gehe zu Eigenschaften.

Wenn das Spielprofil "Hi Def" ist, wechseln Sie zu "Reach".

Kompilieren und ausführen.


-2
2017-10-08 20:23