![]() |
[OpenGL] Startmenü
Hallo DP'ler,
ich versuche gerade ein Startmenü für ein OpenGL Spiel zu erstellen.
Delphi-Quellcode:
So bekomme ich den Text einwandfrei angezeigt, so wies soll. Dies ist also reiner Text.
s := TStringSprite.CreateString('Weiter', 4, 9.2, 0.5, 0.5, FontSprites.STRING_ALIGNMENT_LEFT);
s.Font := Constants.FontTexture; s.Space := 0.5; s.Z := 0; s.Alignment := FontSprites.STRING_ALIGNMENT_LEFT; Map.AddSprite(s); Da dies aber für jeden Menüeintrag ziemlich viel Code wäre und das Menü noch optisch aufgebessert werden soll, habe ich eine eigene Unit erstellt. In dieser habe ich eine Funktion für den oben genannten Code geschrieben (oder es versucht^^). Die Unit sieht wie folgt aus:
Delphi-Quellcode:
Das Problem ist nun, das ich wenn ich versuche diese Funktion in der "GameEngine.pas" aufzurufen (Dort wird auch der Text ausgegeben (s. Quellcode #1) erhalte ich einen undefinierte Bezeichnung.
unit BullsMenu;
interface uses Sprites, FontSprites, Constants; implementation function BMenuItem(eintrag:TStringSprite; x,y,width,height: Single; Align: Integer): TStringSprite; VAR Map : TTextureSprite; BEGIN eintrag := TStringSprite.CreateString(String(eintrag), x, y, width, height, align); eintrag.Font := Constants.FontTexture; eintrag.Space := 0.5; eintrag.Z := 0; eintrag.Alignment := FontSprites.STRING_ALIGNMENT_LEFT; Map.AddSprite(eintrag); END; END. Dort wird diese so aufgerufen:
Delphi-Quellcode:
Vielen Dank schonmal für eure Hilfe!
BMenuItem('Start', 4, 9.2, 0.5, 0.5, FontSprites.STRING_ALIGNMENT_LEFT);
|
Re: [OpenGL] Startmenü
Die Funktion muss noch im interface deklariert werden:
Delphi-Quellcode:
unit BullsMenu;
interface uses Sprites, FontSprites, Constants; // hier: function BMenuItem(eintrag:TStringSprite; x,y,width,height: Single; Align: Integer): TStringSprite; implementation function BMenuItem(eintrag:TStringSprite; x,y,width,height: Single; Align: Integer): TStringSprite; VAR Map : TTextureSprite; BEGIN eintrag := TStringSprite.CreateString(String(eintrag), x, y, width, height, align); eintrag.Font := Constants.FontTexture; eintrag.Space := 0.5; eintrag.Z := 0; eintrag.Alignment := FontSprites.STRING_ALIGNMENT_LEFT; Map.AddSprite(eintrag); END; END. |
Re: [OpenGL] Startmenü
Ah danke :wall: (dummer Fehler)
EDIT: Bevor es zu "Missverständnissen" kommt. Ich rufe die Funktion nun so auf.
Delphi-Quellcode:
In der Funktion war aber noch ein Fehler (Variablen Deklaration). Richtig ist die Unit so:
BMenuItem('Start', 4, 9.2, 0.5, 0.5, FontSprites.STRING_ALIGNMENT_LEFT);
Delphi-Quellcode:
"eintrag" war vorher als TStringSprite deklariert.
unit BullsMenu;
interface uses Sprites, FontSprites, Constants; function BMenuItem(eintrag:String; x,y,width,height: Single; Align: Integer): TStringSprite; implementation function BMenuItem(eintrag:String; x,y,width,height: Single; Align: Integer): TStringSprite; VAR Map : TTextureSprite; BEGIN TStringSprite(eintrag) := TStringSprite.CreateString(eintrag, x, y, width, height, align); TStringSprite(eintrag).Font := Constants.FontTexture; TStringSprite(eintrag).Space := 0.5; TStringSprite(eintrag).Z := 0; TStringSprite(eintrag).Alignment := FontSprites.STRING_ALIGNMENT_LEFT; Map.AddSprite(TStringSprite(eintrag)); END; END. |
Re: [OpenGL] Startmenü
Ähm, zuerst castest du ein TStringSprite auf einen string, und jetzt umgekehrt? :gruebel:
Delphi-Quellcode:
Meinst du vielleicht nicht eher
TStringSprite(eintrag)
Delphi-Quellcode:
:glaskugel:
result
|
Re: [OpenGL] Startmenü
Also so wäre besser?
Delphi-Quellcode:
Anstelle von
unit BullsMenu;
interface uses Sprites, FontSprites, Constants; function BMenuItem(eintrag:String; x,y,width,height: Single; Align: Integer): TStringSprite; implementation function BMenuItem(eintrag:String; x,y,width,height: Single; Align: Integer): TStringSprite; VAR Map : TTextureSprite; BEGIN // Änderungen ANFANG result := TStringSprite.CreateString(eintrag, x, y, width, height, align); result.Font := Constants.FontTexture; result.Space := 0.5; result.Z := 0; result.Alignment := FontSprites.STRING_ALIGNMENT_LEFT; Map.AddSprite(result); // Änderungen ENDE END; END.
Delphi-Quellcode:
Also beides funktionert. Aber was ist daran der Vor/Nachteil?
unit BullsMenu;
interface uses Sprites, FontSprites, Constants; function BMenuItem(eintrag:String; x,y,width,height: Single; Align: Integer): TStringSprite; implementation function BMenuItem(eintrag:String; x,y,width,height: Single; Align: Integer): TStringSprite; VAR Map : TTextureSprite; BEGIN TStringSprite(eintrag) := TStringSprite.CreateString(eintrag, x, y, width, height, align); TStringSprite(eintrag).Font := Constants.FontTexture; TStringSprite(eintrag).Space := 0.5; TStringSprite(eintrag).Z := 0; TStringSprite(eintrag).Alignment := FontSprites.STRING_ALIGNMENT_LEFT; Map.AddSprite(TStringSprite(eintrag)); END; END. |
Re: [OpenGL] Startmenü
Der Vorteil meiner Variante ist, dass sie nicht nur zufällig funktioniert :lol:
Deine Variante funktioniert nur deshalb, weil das Ergebnis einer Funktion und der erste Parameter zufällig beide das register EAX belegen. Gibt dein Delphi keine Warnung aus, dass das Ergebnis der Funktion undefiniert ist? |
Re: [OpenGL] Startmenü
Zitat:
Zitat:
Also das heißt jetzt, wenn der erste Parameter anders heißen würde, würds nicht funktionieren? |
Re: [OpenGL] Startmenü
Zitat:
|
Re: [OpenGL] Startmenü
Ah ok, danke.
Sorry, für die nervigen Fragen. Aber ich bin noch bissel neu auf dem Gebiet. Und ich denke nicht, das es mir was bringt, wenn ich einfach nur den Verbesserungsvorschlag aus der DP reinkopiere. Ich wollte das ganze auch wohl ein wenig verstehen ;) |
Re: [OpenGL] Startmenü
Zitat:
edit: Wenn noch irgendwas unklar ist, frag ruhig nach. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:26 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