![]() |
[nonVCL] Erstellen eines Namenaliases für ein Array... ?
Hi,
ich komm heute nicht vorwärts... :gruebel: Ich bin gerade dabei einen Texturemanager zusammenzubasteln, dabei möchte ich nicht die Texturen mit einer Indexnummer aufrufen sondern mit einem Aliasnamen. zB.:
Delphi-Quellcode:
//...
TextureManager.AddTexture(TexturePath + 'Wasser.bmp', 'texWasser'); //... // TextureManager.BindTexture(12); ist sehr unübersichtlich :-( TextureManager.BindTexture('texWasser'); Im Texturemanager müsste ich nun irgendwie dem Arrayindex einen Namen verpassen
Delphi-Quellcode:
TStringlist bzw eine THashedStringList steht mir ja nun nicht zur Verfügung.
procedure TTextureManager.AddTexture(FileName, TextureName: string; const LoadFromResource: Boolean = FALSE);
begin Setlength(Textures, length(Textures) + 1); LoadTexture(Filename, Textures[High(Textures)], LoadFromResource); AliasNamee.Add(TextureName); // <---<<< ? >>> end; Wie könnt ich es dennoch anstellen ? |
DP-Maintenance
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Ich verschiebe es mal in eine Delphi-Rubrik. ;) |
Re: [nonVCL] Erstellen eines Namenaliases für ein Array... ?
Hi,
Du willst bestimmt sowas wie
Delphi-Quellcode:
Naja Find könnte eine function sein die im Texturen Array nach einer Textur sucht die den im Parameter angegebenen Namen trägt... ;)
Textures.Find('Textur1').Ka...
Gruß Neutral General |
Re: [nonVCL] Erstellen eines Namenaliases für ein Array... ?
moin,
leg dir dafür Konstanten an, mit deren Hilfe du auf den Index zurückgreifst. Deine Liste könntest du verketten und über einen Record verwalten. Speicherung der ersten und letzten Textur. Alle weiteren Texturen werden in den Elementen wiederfindbar adressiert. |
Re: [nonVCL] Erstellen eines Namenaliases für ein Array... ?
:gruebel: Äh, ne. (wenn ich es richtig verstanden habe)
Ich bräuche den Aliasnamen als "dynamischen" String um mich noch nach der 100 und x'ten Textur zu recht zu finden. |
Re: [nonVCL] Erstellen eines Namenaliases für ein Array... ?
Den String kannst du genauso gut im Record unterbringen und über eine Funktion suchen lassen.
Struktur für deine Texturen:
Delphi-Quellcode:
type
TMyTexture = ^TMyTextureStruct; TMyTextureStruct = Record Name: String; FileName: String; ResourceName: String; Prev: TMyTexture; Next: TMyTexture; end; Struktur für die Liste:
Delphi-Quellcode:
TMyTextureField = Record
Last: TMyTexture; First: TMyTexture; end; edit: Wobei das Suchen über einen String recht langsam ist, daher nur die Konstante. |
Re: [nonVCL] Erstellen eines Namenaliases für ein Array... ?
Delphi-Quellcode:
unit TextureManager;
interface uses uTextures; type TTextures = Record Textur: Cardinal; Name: String[32]; end; TTextureManager = class constructor Create; destructor Destroy; override; private Textures: array of TTextures; public function GetTextureIndex(Text: String): integer; procedure AddTexture(FileName, TextureName: string; const LoadFromResource: Boolean = FALSE); procedure BindTexture(TextureName: string); end; implementation const GL_TEXTURE_2D = $0DE1; constructor TTextureManager.Create; begin inherited Create; SetLength(Textures, 0); end; destructor TTextureManager.Destroy; begin // to do inherited Destroy; end; procedure TTextureManager.AddTexture(FileName, TextureName: string; const LoadFromResource: Boolean = FALSE); begin Setlength(Textures, length(Textures) + 1); LoadTexture(Filename, Textures[High(Textures)].Textur, LoadFromResource); Textures[High(Textures)].Name := TextureName; end; function TTextureManager.GetTextureIndex(Text: String): integer; var idx: integer; begin idx := 0; while (Textures[idx].Name <> Text) or (idx > High(Textures)) do inc(idx); Result := idx; end; procedure TTextureManager.BindTexture(TextureName: string); begin glBindTexture(GL_TEXTURE_2D, Textures[GetTextureIndex(TextureName)].Textur); end; END. // End of Unit TextureManager Zitat:
Wie kann ich es denn Anstellen ? // Edit: ...da fehlte was ;) |
Re: [nonVCL] Erstellen eines Namenaliases für ein Array... ?
Jetzt verstehe ich dich nicht. :shock:
Wenn du eh die Unit "Classes" verwendest, kannst du dir das ganze sparen und benutzt gleich eine TList oder leitest von dieser ab. Bezüglich der Konstanten: Die Konstanten müssen natürlich vorher definiert werden, eventuell in einer extra Unit. Wenn du allerdings im Vorfeld weist, das der Mehraufwand nicht lohnt, dann such über den Textur-Namen. |
Re: [nonVCL] Erstellen eines Namenaliases für ein Array... ?
Zitat:
Die Sache ist ja wenn ich Konstanten nehme ist die Anzahl der Texturen ja begrentz. Ich weiss aber noch nicht ob ich 10 oder 1001 Texturen verwenden werde. Das wird von der zu ladenen Scene abhängen. |
Re: [nonVCL] Erstellen eines Namenaliases für ein Array... ?
Zitat:
Ich ging davon aus, das TObject in der unit Classes deklariert wurde. Sie ist allerdings in der System.pas deklariert wurden. Zitat:
Dann hol dir die Textur über den Texturnamen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:58 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