AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi [nonVCL] Erstellen eines Namenaliases für ein Array... ?
Thema durchsuchen
Ansicht
Themen-Optionen

[nonVCL] Erstellen eines Namenaliases für ein Array... ?

Ein Thema von turboPASCAL · begonnen am 13. Mai 2007 · letzter Beitrag vom 13. Mai 2007
Antwort Antwort
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#1

[nonVCL] Erstellen eines Namenaliases für ein Array... ?

  Alt 13. Mai 2007, 12:18
Hi,

ich komm heute nicht vorwärts...
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:
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;
TStringlist bzw eine THashedStringList steht mir ja nun nicht zur Verfügung.
Wie könnt ich es dennoch anstellen ?
Matti
  Mit Zitat antworten Zitat
13. Mai 2007, 12:26
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Sonstige Fragen zu Delphi" verschoben.
Ich verschiebe es mal in eine Delphi-Rubrik.
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

Re: [nonVCL] Erstellen eines Namenaliases für ein Array... ?

  Alt 13. Mai 2007, 12:33
Hi,

Du willst bestimmt sowas wie

Textures.Find('Textur1').Ka... Naja Find könnte eine function sein die im Texturen Array nach einer Textur sucht die den im Parameter angegebenen Namen trägt...

Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
bigg
(Gast)

n/a Beiträge
 
#4

Re: [nonVCL] Erstellen eines Namenaliases für ein Array... ?

  Alt 13. Mai 2007, 13:02
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.
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#5

Re: [nonVCL] Erstellen eines Namenaliases für ein Array... ?

  Alt 13. Mai 2007, 13:29
Ä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.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
bigg
(Gast)

n/a Beiträge
 
#6

Re: [nonVCL] Erstellen eines Namenaliases für ein Array... ?

  Alt 13. Mai 2007, 13:41
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.
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#7

Re: [nonVCL] Erstellen eines Namenaliases für ein Array... ?

  Alt 13. Mai 2007, 14:30
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 von bigg:
edit: Wobei das Suchen über einen String recht langsam ist, daher nur die Konstante.
Ja, dem ist so. Deswegen wollte ich es eben nicht so wie oben machen. Nuch ich verstehe das mit den Konstanten nicht.
Wie kann ich es denn Anstellen ?

// Edit: ...da fehlte was
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
bigg
(Gast)

n/a Beiträge
 
#8

Re: [nonVCL] Erstellen eines Namenaliases für ein Array... ?

  Alt 13. Mai 2007, 14:56
Jetzt verstehe ich dich nicht.
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.
  Mit Zitat antworten Zitat
Benutzerbild von turboPASCAL
turboPASCAL

Registriert seit: 8. Mai 2005
Ort: Sondershausen
4.274 Beiträge
 
Delphi 6 Personal
 
#9

Re: [nonVCL] Erstellen eines Namenaliases für ein Array... ?

  Alt 13. Mai 2007, 15:02
Zitat von bigg:
Jetzt verstehe ich dich nicht.
Wenn du eh die Unit "Classes" verwendest, ...
Ne, mach ich doch nicht.

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.
Matti
Meine Software-Projekte - Homepage - Grüße vom Rüsselmops -Mops Mopser
  Mit Zitat antworten Zitat
bigg
(Gast)

n/a Beiträge
 
#10

Re: [nonVCL] Erstellen eines Namenaliases für ein Array... ?

  Alt 13. Mai 2007, 15:29
Zitat von turboPASCAL:
Ne, mach ich doch nicht.
Stimmt, machst du nicht.
Ich ging davon aus, das TObject in der unit Classes deklariert wurde. Sie ist allerdings in der System.pas deklariert wurden.


Zitat von turboPASCAL:
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.
In wie fern begrenzt? Weil du im Vorfeld die Namen der Texturen nicht kennst und sie somit nicht deklarieren kannst (Konstanten)?
Dann hol dir die Textur über den Texturnamen.
  Mit Zitat antworten Zitat
Antwort Antwort


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:24 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