![]() |
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 :) |
Re: unbekannte Anzahl von Werten als Variable speichern
Moin Weazy,
also irgendwie habe ich Dein Problem nicht verstanden. :gruebel: |
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....
|
Re: unbekannte Anzahl von Werten als Variable speichern
hä? :gruebel:
Zitat:
..string und werte mit einem delimiter getrennt |
Re: unbekannte Anzahl von Werten als Variable speichern
Zitat:
|
Re: unbekannte Anzahl von Werten als Variable speichern
nein, nicht die werte sind 0 3 und 100, sondern es sind unterschiedlich viele werte.
|
Re: unbekannte Anzahl von Werten als Variable speichern
dann schau dir array und setlength an!
|
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.
|
Re: unbekannte Anzahl von Werten als Variable speichern
genau so etwas suche ich, wie funktioniert denn das?
|
Re: unbekannte Anzahl von Werten als Variable speichern
Delphi-Quellcode:
..und hier gibt es eine tolle suche im forum, oder du nutzt f1 in der ide
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 .. |
Re: unbekannte Anzahl von Werten als Variable speichern
Danke, jetz komm ich weiter :-D
|
Re: unbekannte Anzahl von Werten als Variable speichern
Zitat:
![]() 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... ;) ) |
Re: unbekannte Anzahl von Werten als Variable speichern
Zitat:
|
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! |
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:
Irgendwie las sich das mbisher ein wenig umwegig, deshalb hake ich einfach mal nach.
type
TMaterial = class public property Name : String read blabla write blabla; end; TDeinObjekt = class public property Material : TMaterial read blabla write blabla; end; Falls du Lust hast, kannst du ja erklären, wie du diese Beziehung (Objekt<->Material) gelöst hast. Auch wenn es bereits läuft. ;) |
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