Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Einfache "verlinkung" speichern? (https://www.delphipraxis.net/179358-einfache-verlinkung-speichern.html)

Acuaplano 2. Mär 2014 13:02

Delphi-Version: 5

Einfache "verlinkung" speichern?
 
Heyho,

hab mal ne ganz allgemeine Frage, die eigentlich nicht nur in dieses Unterforum passen würde. Ich arbeite im Moment an einem Spiel bzw. dem Editor dazu und es geht darum, dass ich Verweise auf andere Objekte speichern will. Also mal ein Beispiel: Ich setz Objekt A, einen NPC, auf die Karte und wenn ich im Spiel mit dem spreche, soll Objekt B, z.b. ein Baum, verschwinden.
Das ganze will ich natürlich nicht als Hard-Code, sondern soll im Interface des Editors auswählbar sein. Als Dateiformat für die Karten dient XML und jetzt kommt eben die Frage: Wie mache ich das Ganze sinnvoll/ einfach? Ich will nicht genau wissen, wie ich das in XML speichere, sondern nur grob das Prinzip. Mir würden jetzt nur komplizierte Methoden einfallen, z.b. das Speichern der Position in einer Liste, aber sowas wäre doch ziemlich fehleranfällig.

Danke schon mal für die Hilfe

Puke 2. Mär 2014 14:07

AW: Einfache "verlinkung" speichern?
 
Normal würde ich Pointer vorschlagen...
Wenn du die Verlinkungen auch speichern willst, wird dies eventuell etwas schwerer.

himitsu 2. Mär 2014 14:21

AW: Einfache "verlinkung" speichern?
 
Entweder man macht es wie die VCL/FMX und speichert den Namen der verlinkten Komponente.

Oder man speichert die Position (Koordinaten) der verlinkten Komponente und nicht die Komponente selber.
(also z.B. Link auf Komponente im Feld X-Y ... egal was sich dort befindet)

Acuaplano 2. Mär 2014 23:08

AW: Einfache "verlinkung" speichern?
 
Hmm keine simple lösung? :D
Dann werd ich wohl nicht drumrum kommen ID's verteilen zu müssen.
(Koordinaten gehen übrigens nicht, weil es ja nicht alles statische Objekte sind)

stahli 2. Mär 2014 23:37

AW: Einfache "verlinkung" speichern?
 
Name oder Id kommt letztlich auf´s gleiche raus (wenn sie jeweils eindeutig sind).

Du musst dann das Ziel als Text ("Baum1" oder "2345") speichern und zur Laufzeit das passende Objekt suchen (möglichst schnell, z.B. mit binärer Suche).
Schwieriger ist die Entscheidung, ob man die Suchaktion einmalig nach dem Laden oder bei jedem Zugriff durchführt.
Es könnte ja ein zuletzt verlinktes Objekt beim nächsten Zugriff das Objekt schon aufgelöst worden sein.

himitsu 3. Mär 2014 00:10

AW: Einfache "verlinkung" speichern?
 
Im Grunde reicht ja das einmalige Suchen, beim Einlesen und danach kann man ja wieder mit Pointern/Objektreferenzen arbeiten.

Und nein, selbst wenn die Objekte nicht "statisch" sind, dann sind sie es aber dennoch.
Denn beim Speichern/Laden verändert sich die Verlinkung nicht, also ist sie somit statisch, im gespeicherten Zustand.



Entweder man implementiert selber einen Code, der Verlinkungen auflöst, wenn man ein Objekt löscht.

Oder man baut seinen Code soauf, daß er Links aufräumt.
Beide Objekte kennen gegenseitig die Verlinkung und können sie beim Löschen in ihrem Gegenüber auf nil setzen.

Und TComponent kennt schon Methoden zum automatischen Verlinken.
Da kann sich ein Objekt beim Anderen registrieren und dann bekommen Beide eine Notification, wenn Einer von Beiden gelöscht wird und da kann man die Verlinkung auflösen.

hoika 3. Mär 2014 00:47

AW: Einfache "verlinkung" speichern?
 
Hallo,

statt IDs würde ich GUIDs nehmen.

Heiko

Sir Rufo 3. Mär 2014 00:50

AW: Einfache "verlinkung" speichern?
 
Zitat:

Zitat von hoika (Beitrag 1250350)
Hallo,

statt IDs würde ich GUIDs nehmen.

Heiko

für die IDs kann man GUIDs verwenden ;)

himitsu 3. Mär 2014 01:36

AW: Einfache "verlinkung" speichern?
 
GUID :roll:

Und wenn man die "Namen" nur für's Speichern braucht, dann kann man auch genauso gut einfach durchnummerieren
oder ganz billig den Pointer der Objektreferenzen als "ID" (nach Integer konvertiert, als Hex oder sonstwie) verwenden. (Beim Laden die ID aber nicht wieder in einen Pointer konvertieren, denn zu 99.9999999% wurden die Objekte bestimmt nicht an der selben Stelle neu erstellt)

Acuaplano 3. Mär 2014 06:03

AW: Einfache "verlinkung" speichern?
 
Hmm, klingt ja alles schonmal ganz nett. Dass man einfach nur am Anfang die gespeicherten links wieder durch pointer ersetzt ist mir gar nicht eingefallen. Aber wie Himitsu schon geschrieben hat: Mir geht's eigentlich nur um's speichern, normale durch Nummerierung reicht für mich aus. Aber ansonsten danke für die Antworten!


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:37 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz