AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Einfache "verlinkung" speichern?

Ein Thema von Acuaplano · begonnen am 2. Mär 2014 · letzter Beitrag vom 3. Mär 2014
Antwort Antwort
Seite 1 von 2  1 2      
Acuaplano

Registriert seit: 8. Mai 2013
29 Beiträge
 
#1

Einfache "verlinkung" speichern?

  Alt 2. Mär 2014, 14:02
Delphi-Version: 5
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
  Mit Zitat antworten Zitat
Benutzerbild von Puke
Puke

Registriert seit: 7. Nov 2012
123 Beiträge
 
Delphi XE5 Architect
 
#2

AW: Einfache "verlinkung" speichern?

  Alt 2. Mär 2014, 15:07
Normal würde ich Pointer vorschlagen...
Wenn du die Verlinkungen auch speichern willst, wird dies eventuell etwas schwerer.
Gruß Puke
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#3

AW: Einfache "verlinkung" speichern?

  Alt 2. Mär 2014, 15:21
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)
$2B or not $2B
  Mit Zitat antworten Zitat
Acuaplano

Registriert seit: 8. Mai 2013
29 Beiträge
 
#4

AW: Einfache "verlinkung" speichern?

  Alt 3. Mär 2014, 00:08
Hmm keine simple lösung?
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)

Geändert von Acuaplano ( 3. Mär 2014 um 00:10 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von stahli
stahli
Online

Registriert seit: 26. Nov 2003
Ort: Halle/Saale
4.343 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Einfache "verlinkung" speichern?

  Alt 3. Mär 2014, 00:37
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.
Stahli
http://www.StahliSoft.de
---
"Jetzt muss ich seh´n, dass ich kein Denkfehler mach...!?" Dittsche (2004)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#6

AW: Einfache "verlinkung" speichern?

  Alt 3. Mär 2014, 01:10
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.
$2B or not $2B

Geändert von himitsu ( 3. Mär 2014 um 01:39 Uhr)
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.276 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Einfache "verlinkung" speichern?

  Alt 3. Mär 2014, 01:47
Hallo,

statt IDs würde ich GUIDs nehmen.

Heiko
Heiko
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Einfache "verlinkung" speichern?

  Alt 3. Mär 2014, 01:50
Hallo,

statt IDs würde ich GUIDs nehmen.

Heiko
für die IDs kann man GUIDs verwenden
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#9

AW: Einfache "verlinkung" speichern?

  Alt 3. Mär 2014, 02:36
GUID

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)
$2B or not $2B

Geändert von himitsu ( 3. Mär 2014 um 11:26 Uhr)
  Mit Zitat antworten Zitat
Acuaplano

Registriert seit: 8. Mai 2013
29 Beiträge
 
#10

AW: Einfache "verlinkung" speichern?

  Alt 3. Mär 2014, 07:03
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!
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:30 Uhr.
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