Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   unbekannte Anzahl von Werten als Variable speichern (https://www.delphipraxis.net/61961-unbekannte-anzahl-von-werten-als-variable-speichern.html)

Weazy 28. Jan 2006 20:55


unbekannte Anzahl von Werten als Variable speichern
 
Hi, ich habe folgendes Problem:

Ich arbeite an einem 3D-Editor für mein Spiel. Momentan bin ich gerade bei den Materialien. Ein Material kann für verschiedene und beliebig viele Objekte verwendet werden. Jedes Material trägt einen Namen, der der Benutzer nun auch ändern können soll. Dabei gehe ich folgender Massen vor:

- Zuerst wird geprüft, welche Objekte das zu bearbeitende Material verwenden
- anschliessend wird das Material umbenannt; dadurch haben alle Objekte die dieses Material verwenden keines mehr
- Allen Objekten die das Material verwendeten wir das neue zugewiesen

Mein Problem ist nun aber das folgende: alle Objekte mit diesem Material müssen ja in eine Variable gespeichert werden (jedes Objekt hat einen Namen und einen genauen Index, die Materialien können also als String oder Integer gespeichert werden). Da aber nicht bekannt ist, wie viele Objekte das sind, kann ich die nicht einfach variablen verwenden.

Wie also kann ich eine unbekannte Anzahl von werten in eine variable speichern und wieder laden innerhalb einer Funktion?

Danke!

PS: eine funktions-Demo des Editores und des Spieles werde ich bald posten :)

Christian Seehase 28. Jan 2006 21:01

Re: unbekannte Anzahl von Werten als Variable speichern
 
Moin Weazy,

also irgendwie habe ich Dein Problem nicht verstanden. :gruebel:

Weazy 28. Jan 2006 21:08

Re: unbekannte Anzahl von Werten als Variable speichern
 
ich muss in einer funktion mehrere intger oder string werte zwischenspeichern. Das Problem ist nur, dass keine 3 oder 100 werte sein können....

ibp 28. Jan 2006 21:08

Re: unbekannte Anzahl von Werten als Variable speichern
 
hä? :gruebel:

Zitat:

Zitat von Weazy
Wie also kann ich eine unbekannte Anzahl von werten in eine variable speichern und wieder laden innerhalb einer Funktion?

..array
..string und werte mit einem delimiter getrennt

ibp 28. Jan 2006 21:10

Re: unbekannte Anzahl von Werten als Variable speichern
 
Zitat:

Zitat von Weazy
... dass keine 3 oder 100 werte sein können....

also werte 1,2,4..99,101..unendlich :?: :gruebel:

Weazy 28. Jan 2006 21:12

Re: unbekannte Anzahl von Werten als Variable speichern
 
nein, nicht die werte sind 0 3 und 100, sondern es sind unterschiedlich viele werte.

ibp 28. Jan 2006 21:14

Re: unbekannte Anzahl von Werten als Variable speichern
 
dann schau dir array und setlength an!

Nikolas 28. Jan 2006 21:15

Re: unbekannte Anzahl von Werten als Variable speichern
 
Suchst du vielleicht ein dynamisches Array? Damit kannst du per setlength zur Laufzeit die Größe des Arrays ändern, sobald du weisst, wie viele Elemente es haben soll.

Weazy 28. Jan 2006 21:16

Re: unbekannte Anzahl von Werten als Variable speichern
 
genau so etwas suche ich, wie funktioniert denn das?

ibp 28. Jan 2006 21:20

Re: unbekannte Anzahl von Werten als Variable speichern
 
Delphi-Quellcode:
var meinarray:array of integer
...
setlength(meinarray,45); // meinarray geht nun von 0..44 = 45 elemente
..
meinarray[3]:=3462357; // das 4. element hat jetzt den wert 3462357
..
..und hier gibt es eine tolle suche im forum, oder du nutzt f1 in der ide

Weazy 28. Jan 2006 21:24

Re: unbekannte Anzahl von Werten als Variable speichern
 
Danke, jetz komm ich weiter :-D

Elvis 28. Jan 2006 21:38

Re: unbekannte Anzahl von Werten als Variable speichern
 
Zitat:

Zitat von ibp
Delphi-Quellcode:
var meinarray:array of integer
...
setlength(meinarray,45); // meinarray geht nun von 0..44 = 45 elemente
..
meinarray[3]:=3462357; // das 4. element hat jetzt den wert 3462357
..
..und hier gibt es eine tolle suche im forum, oder du nutzt f1 in der ide

hmm... :gruebel:Why setlength is evil™
In 9 von 10 Fällen dürfte setLength auf ein tieferes Problem im Design zurückzuführen sein, IMHO. ;)

@Weazy
Magst du vllt ein paar Infos zu dem rausrücken wie Materialien und Objekte verknüpft sind und wie sie verwendet werden?
Wenn du Eigenchaften eines Materials änderst sollten doch alle Objekte diese Änderungen sehen können. Solange sie natürlich alle eine Referenz auf die gleiche Instanz des Materials besitzen. ;) (Schuss ins blaue, da nicht genug Infos... ;) )

ibp 28. Jan 2006 21:42

Re: unbekannte Anzahl von Werten als Variable speichern
 
Zitat:

Zitat von Elvis
In 9 von 10 Fällen dürfte setLength auf ein tieferes Problem im Design zurückzuführen sein, IMHO.

... das kommt darauf an! klar wenn ich die größe des arrays in kleinen schritten ändere. wenn ich aber z.b. vorher die anzahl kenne, dann ist doch alles ok!

Weazy 28. Jan 2006 21:50

Re: unbekannte Anzahl von Werten als Variable speichern
 
Jedes Objekt hat ein grundmaterial, in welchem farbe, umgebungsfarbe, glanz und eine textur gespeichert ist. Für spezielle Materialien kann jedes Objekt einer MaterialBibliothek zugewiesen werden. Jeder Materialtyp(Bump-Map, Cube-Map, Multimaterial, Glas, CG, GLSlang...) hat eine solche Bibliothek, welch wiederum mehrere Materialien enthält. So sind alle Materialien nach ihrem typ geordnet. Wenn ich nun den Namen eines Materiales ändere "finden" die Objekte es nicht mehr und weisen nur noch das Standart Material auf. Deshalb muss das Material mit dem neuen Namen nocheinmal zugewiesen werden.

PS: es funktioniert jetzt!

Elvis 28. Jan 2006 22:18

Re: unbekannte Anzahl von Werten als Variable speichern
 
Ich verstehe immer noch nicht, warum die Änderung des Namens dazu führen kann, dass es plötzlich nicht mehr benutzt wird?

Wie hast du das denn aufgebaut?
Wenn du Klassen (und damit Referenzen) benutzt, wäre das Meaterial immer noch das gleiche Material, auch wenn der Name geändert wurde.
Das Objekt würde den geänderten Namen sehen, aber es hätte immer noch die selbe Referenz auf die selbe Instanz von TMaterial.
Pseudo code:
Delphi-Quellcode:
type
  TMaterial = class
  public
    property Name : String read blabla write blabla;
  end;

  TDeinObjekt = class
  public
    property Material : TMaterial read blabla write blabla;
  end;
Irgendwie las sich das mbisher ein wenig umwegig, deshalb hake ich einfach mal nach.
Falls du Lust hast, kannst du ja erklären, wie du diese Beziehung (Objekt<->Material) gelöst hast.
Auch wenn es bereits läuft. ;)

Weazy 28. Jan 2006 23:14

Re: unbekannte Anzahl von Werten als Variable speichern
 
Die RenderProzedur sucht bei jedem Vorgang beim rendern jedes objektes das eingetragene Material. Wenn ds angegebene Material nicht gefunden wird, wird einfach das StandartMaterial verwendet. Das Spiel und der Editor laufen übrigens auf OpenGL basis.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:17 Uhr.

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