Ich habe das Problem, ein Inventarsystem in XNA zu implementieren (spielt keine Rolle, könnte jede Plattform sein), aber bisher. Hier ist das Problem, um das ich mich zu kümmern versuche:
Wie kann ich einen Gegenstand aus der Welt holen (denken Sie, wenn Sie ein Monster töten, lässt es die Rüstung fallen) und ihn in das Inventar meines Spielers aufnehmen?
Wenn ein Inventar technisch gesehen nur eine Liste von Gegenständen ist, wie könnte ich dann Stahlschwert aus der Welt in das Inventar meines Spielers aufnehmen, ohne dass eine Klasse mehr als eine Sache tut?
Ich habe derzeit eine Elementstruktur, die einen eindeutigen Hex-Wert, eine Anzahl der Elemente (für Stapelelemente wie Pfeile) und eine Textur zum Rendern im Inventar sowie einige andere unwichtige Eigenschaften (Name, Beschreibung usw.) enthält. .
Es wäre ein schlechtes Design, wenn ich meine vorhandene Gegenstandsklasse ändern müsste, um eine Weltposition zusammen mit der Kollisionserkennung aufzunehmen (ich möchte nicht, dass der Gegenstand durch die Erde fällt).
Vielen Dank für alle Überlegungen!
WorldItem
die von deiner getrennt istInventoryItem
? (VielleichtWorldItem
hat der eineInventoryItem
Vorlage, die beim Abholen in das Inventar des Spielers aufgenommen wird).Inventory
, die a nimmtWorldItem
und es als hinzufügtInventoryItem
. Damit können auch Fälle behandelt werden, in denen Elemente gestapelt werden müssen (z. B. Pfeile).Antworten:
Der Ansatz, den ich wählen würde, besteht darin, zwei verschiedene Strukturen (oder Klassen) zu haben.
WorldItem
undInventoryItem
.Sie können dann ein
InventoryItem
als Eigenschaft / Feld von Ihnen hinzufügen,WorldItem
das in das Inventar des Spielers aufgenommen wird, wenn der Weltgegenstand abgeholt wird.Sie möchten irgendwo eine Methode (in der Spielerklasse oder in einer der Gegenstandsklassen), die das Hinzufügen eines Inventargegenstands zum Inventar des Spielers übernimmt, um das Stapeln wie Gegenstände zu behandeln.
quelle
Wie bereits erwähnt, ist die Aufteilung in mehrere Klassen oder Arrays die beste Wahl. Ich würde 3 Klassen erstellen, Welt, Spieler und Gegenstand. Die Weltklasse würde eine Liste WorldItems enthalten, ebenso wie die Player-Klasse, aber List Inventory. Wenn ein Spieler einen Gegenstand aufnimmt, verschieben Sie ihn aus der Liste in der Welt Klasse in die Liste in der Player-Klasse.
In der Draw-Schleife Ihres Spiels können Sie eine Schleife erstellen, in der alle Elemente in der WorldItems-Liste auf den Bildschirm gezeichnet werden. Die Inventarliste auf dem Spielerobjekt wird jedoch ignoriert.
quelle