Die Verknüpfung von Objekten in der Liste für die manuelle Bearbeitung später (Game Engine / Rahmen - Entity-Management-Teil)

StackOverflow https://stackoverflow.com/questions/2077340

  •  21-09-2019
  •  | 
  •  

Frage

Vor allem hallo, ist dies mein erstes Mal hier. Ich bin jung Coder (15), und dies ist mein zweiter Versuch, ein Spiel zu machen (eigentlich ganz wiederverwendbaren Spiel-Engine und den Rahmen, nicht sicher, wie es nennt, vielleicht GDK?), Während es viel organisiert diesmal mehr.

Wichtiger Hinweis: Ich bin mit XNA Framework, so dass das Game-Engine DirectX-Management nicht rein niedriges Niveau ist! Ich versuche, mit vordefinierten Klassen zu erweitern XNA, die leicht sein wird, in jedem Spiel einzusetzen und zu verwalten später!

habe ich auf der Suche nach einem Weg stecken ein Entity in WorldManager die Liste zu setzen, rufen Sie später die Einheit für direkte Änderungen, und dann auf die Liste gesetzt zurück (so es mit Update-Methode verwendet wird).

Meine Ideen (und Fragen) waren:

  1. Best mögliche Lösung wäre, irgendwie die Einheit mit der Liste verknüpft zu machen, so wie ich das einsamen Entitätsobjekt aktualisiere es auch in der Liste aktualisiert. Leider weiß ich nicht, wie es zu tun, und dies könnte die beste Antwort sein.

  2. Was auch ich dachte, war etwa zu bearbeiten die Entität ich zum ersten Mal erstellt, und verwenden Sie dann finden sie in der Liste und Update zu suchen. Das Problem ist, dass ich bin nicht sicher, wie die Methode find sucht. Was passiert, wenn eine Änderung, es ist ein ganz neues anderes Objekt kann denken Methode? (Wie findet tatsächlich finden?)

  3. Was ich tat, war IDs Entities im Moment fügen sie in die Liste aufgenommen sind, so dass ich sie wieder an ihren Platz nach der Bearbeitung setzen. Das Problem ist, dass ich remove-Methode zu haben, und ich bin nicht sicher, würde es die Indizes ändern, denn wenn es wäre, dann würde ich muss re-Update-IDs jedesmal, wenn ich entfernen, um eine Einheit machen. Ich finde das ziemlich ineffizient. So würde List <>. Entfernen Sie die Indizes ändern? (Ich denke, es würde)

Diese sind eigentlich drei Fragen in einer, und ich würde Antwort auf eine dieser, natürlich Antworten auf Fragen oberste schätzen werden mehr geschätzt!

Ein Stück Code Vorstellung davon zu bekommen, wie funktioniert das alles:

public class WorldManager
{
    List<Entity> Entities = new List<Entity>();
    List<Entity> ToAdd_Entities = new List<Entity>();
    List<Entity> ToRemove_Entities = new List<Entity>();
...
    public void Update()
    {
        for(int count = 0; count < ToAdd_Entities.Count; count++)
        {
            Entities.Add(ToAdd_Entities[count]);
            int index = Entities.IndexOf(ToAdd_Entities[count]);
            Entities[index].ID = index;

            ToAdd_Entities.Remove(ToAdd_Entities[count]);
        }

        for (int count = 0; count < ToRemove_Entities.Count; count++)
        {
            Entities.Remove(ToRemove_Entities[count]);
            ToAdd_Entities.Remove(ToAdd_Entities[count]);

            //index update is required here too, I just didn't implement it yet.
        }
    ...
   }
}

Wie würde ich es zugreifen:

List<Entity> bots = WorldManager.GetEntitiesByName("bot");
bots[1].Location = new Vector2(x,y);
WorldManager.UpdateEntities(bots);

Ich habe nicht das Stück Code verwenden, die nur ein einfaches Beispiel für meine Idee.

Bitte vergib mir meine verwirrend Englisch (wenn Sie es verwirrend finden), ich bin ein serbischer.

Vielen Dank im Voraus.

War es hilfreich?

Lösung 2

Nun, ich habe Antwort auf meine oberste Lösung! Habe es von einer anderen Frage von mir, und ich dachte Lösung setzen soll auch hier.

Die Antwort ist, dass, solange ich es in die Liste aufgenommen, es ist bereits verknüpft, weil Entity eine Klasse ist und die Objekte sind „Referenztypen“, so, wenn ich sie zu einem anderen Objekt zuweisen, oder eine Liste in diesem Fall sind sie mit ihm verbunden. Jegliche Änderungen, die ich auf dieses Objekt machen werden automatisch auf der anderen Seite aktualisiert!

(Jemand korrigieren Sie mich, wenn ich falsch bin. Ich check this out werde, sobald ich zu Test meine Rahmen / Motor setzen, und lassen Sie wissen, ist dies „die“ Lösung.)

Andere Tipps

Ich schlage vor, nicht mit der „einer großen Liste, in der jedes Objekt in ist“ zu gehen -Ansatz. Vielmehr Eingang konzentrieren sich auf, Grafiken und andere grundlegende Dinge in den Motor, dann lassen Sie den Rest Spiel bestimmte Klassen.

Stellen Sie sich eine 2D-Welt mit vielen Bäumen in ihn haben, sind sie alle meist statisch. Jetzt haben Sie 5k von ihnen bekam dort sitzen in Ihrer Liste Entitäten genau das tun, nichts, statt sie dort setzen, sollten Sie sie lieber in Ihrer Map-Klasse in einer Liste irgendwo setzen, auf diese Weise sie leichter zugänglich sind (Sie dies nicht tun müssen die ganze Liste durchgehen, sie zu finden) und Design wird auch viel sauberer. Auf diese Weise haben Sie nicht eine ganze Klasse von Generika-Handler-Code zu Code, der am Ende noch nicht zu jedem möglichen Objekt paßt Sie in Ihre Welt werfen könnte.

So sind die 3 Tipps von meiner Seite sind: - Setzen Sie nur nicht-Spiel-spezifischen Code in dem Motor (Grafik, Sound, Input) - Vom Motor nennt nur zwei Methoden in Ihrem Spiel, wie z.B. updateGame () und renderGame (), die dann den Rest kümmern nehmen - Und last but not least: Halten Sie die Komponenten Ihres Spiels von einem anderen getrennt, so dass sie nur lassen interact, wo es wirklich gebraucht wird

.

Auch wichtig, einige Spiele bauen, dann schauen, welcher Code sie wirklich teilen und von diesem Code Motor bilden.

Wenn Sie ein Beispiel wollen, wie dies geschehen könnte (obwohl ich keine Garantie tun, dass es die perfekten) Sie einen Blick auf meinem kleinen Motor nehmen hier . Es ist Java und nicht wirklich gut kommentiert, aber es sollte Ihnen eine grundlegende Idee geben, wie Sie Ihren Motor zu strukturieren. Wenn Sie ein Spiel, das ich habe Build mit dem Motor einen Blick auf dem Download-Bereich sehen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top