AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

[OpenGL] Startmenü

Ein Thema von BullsEye · begonnen am 9. Apr 2009 · letzter Beitrag vom 14. Apr 2009
Antwort Antwort
Seite 1 von 2  1 2   
BullsEye

Registriert seit: 8. Sep 2007
Ort: Werlte
872 Beiträge
 
Delphi 7 Personal
 
#1

[OpenGL] Startmenü

  Alt 9. Apr 2009, 21:58
Hallo DP'ler,

ich versuche gerade ein Startmenü für ein OpenGL Spiel zu erstellen.

Delphi-Quellcode:
  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);
So bekomme ich den Text einwandfrei angezeigt, so wies soll. Dies ist also reiner Text.
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:
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.
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.

Dort wird diese so aufgerufen:

BMenuItem('Start', 4, 9.2, 0.5, 0.5, FontSprites.STRING_ALIGNMENT_LEFT); Vielen Dank schonmal für eure Hilfe!
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#2

Re: [OpenGL] Startmenü

  Alt 9. Apr 2009, 22:06
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.
  Mit Zitat antworten Zitat
BullsEye

Registriert seit: 8. Sep 2007
Ort: Werlte
872 Beiträge
 
Delphi 7 Personal
 
#3

Re: [OpenGL] Startmenü

  Alt 9. Apr 2009, 22:13
Ah danke (dummer Fehler)

EDIT: Bevor es zu "Missverständnissen" kommt.

Ich rufe die Funktion nun so auf.
BMenuItem('Start', 4, 9.2, 0.5, 0.5, FontSprites.STRING_ALIGNMENT_LEFT); In der Funktion war aber noch ein Fehler (Variablen Deklaration). Richtig ist die Unit so:

Delphi-Quellcode:
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.
"eintrag" war vorher als TStringSprite deklariert.
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#4

Re: [OpenGL] Startmenü

  Alt 9. Apr 2009, 22:19
Ähm, zuerst castest du ein TStringSprite auf einen string, und jetzt umgekehrt?
TStringSprite(eintrag) Meinst du vielleicht nicht eher
result
  Mit Zitat antworten Zitat
BullsEye

Registriert seit: 8. Sep 2007
Ort: Werlte
872 Beiträge
 
Delphi 7 Personal
 
#5

Re: [OpenGL] Startmenü

  Alt 9. Apr 2009, 22:23
Also so wäre besser?

Delphi-Quellcode:
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.
Anstelle von

Delphi-Quellcode:
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.
Also beides funktionert. Aber was ist daran der Vor/Nachteil?
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#6

Re: [OpenGL] Startmenü

  Alt 9. Apr 2009, 22:26
Der Vorteil meiner Variante ist, dass sie nicht nur zufällig funktioniert
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?
  Mit Zitat antworten Zitat
BullsEye

Registriert seit: 8. Sep 2007
Ort: Werlte
872 Beiträge
 
Delphi 7 Personal
 
#7

Re: [OpenGL] Startmenü

  Alt 9. Apr 2009, 22:28
Zitat von NamenLozer:
Der Vorteil meiner Variante ist, dass sie nicht nur zufällig funktioniert
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?
Zitat:
[Warnung] BullsMenu.pas(47): Rückgabewert der Funktion 'BMenuItem' könnte undefiniert sein
Betonung auf KÖNNTE!

Also das heißt jetzt, wenn der erste Parameter anders heißen würde, würds nicht funktionieren?
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#8

Re: [OpenGL] Startmenü

  Alt 9. Apr 2009, 22:31
Zitat von BullsEye:
Zitat von NamenLozer:
Der Vorteil meiner Variante ist, dass sie nicht nur zufällig funktioniert
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?
Zitat:
[Warnung] BullsMenu.pas(47): Rückgabewert der Funktion 'BMenuItem' könnte undefiniert sein
Betonung auf KÖNNTE!

Also das heißt jetzt, wenn der erste Parameter anders heißen würde, würds nicht funktionieren?
Jo.
  Mit Zitat antworten Zitat
BullsEye

Registriert seit: 8. Sep 2007
Ort: Werlte
872 Beiträge
 
Delphi 7 Personal
 
#9

Re: [OpenGL] Startmenü

  Alt 9. Apr 2009, 22:48
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
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#10

Re: [OpenGL] Startmenü

  Alt 9. Apr 2009, 23:05
Zitat von BullsEye:
Aber ich bin noch bissel neu auf dem Gebiet.
Kein Ding, ich bin nur anfangs aufgrund deiner Beiträge und deiner Programme nicht davon ausgegangen, dass das für dich wirklich neu ist. Dachte, du stehst vielleicht einfach nur auf dem Schlauch

edit: Wenn noch irgendwas unklar ist, frag ruhig nach.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 08:56 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