Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Sa Jul 05, 2025 13:38

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Autor Nachricht
BeitragVerfasst: Do Sep 18, 2008 12:41 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
HI,

ich hab ein ganz seltsames Problem mit der TextSuite von LossyEx. Und zwar stürzt es immer ab (Zugriffsverletzungen).
Ich bin dabei so was wie n 3D-Chat zu machen. Und wenn ich einen neuen Player erstell wird eine Sprechblase und ein Font für den Player angelegt.
Die Sprechblase wieder rum besitzt auch einen Font, der auf die selbe Weise erzeugt wird wie fFont.

Code:
  1. constructor TPlayer.Create(FontContextID: tsContextID);
  2. var FontFilePath: String;
  3. var TextColor: TTextColor;
  4. begin
  5.   inherited Create;                    
  6.  
  7.   //Textfarbe festlegen
  8.   TextColor[0] := 0;
  9.   TextColor[1] := 0;
  10.   TextColor[2] := 0;
  11.   TextColor[3] := 1;
  12.   FontFilePath := ExtractFilePath(Application.ExeName)+'data\comic.ttf'; //Font-Pfad
  13.   fSpeechBubble := TSpeechBubble.Create(FontContextID,FontFilePath,20,TextColor); //Sprechblase erzeugen
  14.   fFont := TFont.Create(FontContextID, ExtractFilePath(Application.ExeName)+'data\comic.ttf', 30,TS_STYLE_NORMAL); //Font erzeugen
  15.  
  16.   //Player-Pos festlegen
  17.   fPosX := 0;
  18.   fPosY := 0;
  19.   fPosZ := 0;
  20.  
  21.   fKugel := gluNewQuadric;//Testkugel zum rendern
  22. end;


Code:
  1. constructor TFont.Create(FontContextID: tsContextID; FontFileName: String; FontWidth: Integer; Style: Cardinal);
  2. begin
  3.   inherited Create;
  4.  
  5.   //Textfarbe festlegen
  6.   fColor[0] := 0;
  7.   fColor[1] := 0;
  8.   fColor[2] := 0;
  9.   fColor[3] := 1;
  10.  
  11.   fFileName := FontFileName; //FileName übernehmen
  12.   fWidth    := FontWidth;    //FontWidth übernehmen
  13.   fStyle    := Style;        //FontStyle übernehmen
  14.  
  15.   tsContextBind(FontContextID);//FontContext aktivieren
  16.  
  17.   //Font erzeugen
  18.   tsSetParameteri(TS_RENDERER, TS_RENDERER_OPENGL); CheckError;
  19.   tsSetParameteri(TS_CREATOR, TS_CREATOR_GDI); CheckError;
  20.   tsFontCreateCreator(pAnsiChar(fFileName), fWidth, fStyle, TS_DEFAULT, TS_DEFAULT, @fFontID); CheckError;
  21.   tsPostAddShadow4f(1,0,0,1,1,1,0); //Schatten gegen schwarze Balken
  22. end;

Wenn ich das so mach, dann Stürzt er an der Zeile "GetMem(Buffer, BufferSize);" (TextSuiteClasses.pas Zeile 2903) ab, wenn er fFont erzeugen will.

Wenn ich fSpeechBubble := TSpeechBubble auskommentiere, dann stürzt er erst bei der Textausgabe bei fFont ab:
Code:
  1. procedure TFont.TextOut(Text: String; X,Y,Width,Height: Single; Align: Cardinal);
  2. begin
  3.   glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
  4.   glEnable(GL_BLEND); //Blending an
  5.  
  6.   glPushMatrix;
  7.     glScalef(0.01,-0.01,0.01);  //Scalieren
  8.     glColor4fv(@fColor);        //Farbe setzen
  9.     tsSetParameteri(TS_ALIGN, Align); //ALign setzen
  10.     tsTextBeginBlock(round((X*100)-(Width*50)), //Textblock beginnen
  11.                      round((Y*100)-(Height*50)),
  12.                      round(Width*100),
  13.                      round(Height*100),
  14.                      TS_BLOCKFLAG_WORD_WRAP);
  15.       tsFontBind(fFontID); //Font binden
  16.       tsTextOutA(PAnsiChar(Text)); //Textausgeben --> hier stürzt er ab!
  17.     tsTextEndBlock; //TextBlock schließen
  18.     glBindTexture(GL_TEXTURE_2D,0); //Textur löschen
  19.   glPopMatrix;
  20.  
  21.   glDisable(GL_BLEND); //Blending aus
  22. end;

und zwar wieder bei dem Befehl GetMem(pBuffer, Size); diesmal aber in TextSuiteClasses.pas zeile 3039!

Wenn ich alles was mit fFont zu tun hat auskommentiere, dann stürzt er bei der Textausgabe der SpeechBubble ab und zwar in TextSuiteClasses.pas Zeile 1972. Obwohl das bloß ne Case-Anweisung und ne einfache Zuweisung is?!
Code:
  1.   tsSetParameteri(TS_ALIGN, TS_ALIGN_BLOCK); //Align übergeben
  2.  
  3.   tsTextBeginBlock(-Width div 2, -Height, Width, Height, TS_BLOCKFLAG_WORD_WRAP); //Textblock beginnen
  4.     tsFontBind(fFontID); //Font binden
  5.     tsTextOutA(PAnsiChar(Text)); //Text ausgeben  --> ABSTURZ
  6.     fH := tsTextGetHeightA(nil); //Blockhöhe ermitteln
  7.     fW := tsTextGetWidthA(nil);  //Blockbreite ermitteln
  8.   tsTextEndBlock; //TextBlock schließen
  9.  
  10.   glBindTexture(GL_TEXTURE_2D,0);//Textur löschen


Der Witz an der Sache is: ich hab an dem Quelltext hier nichma was geändert, ich hab nur 2 alte Fonts (TFont) die ich im Hauptmenü nich mehr gebraucht hab gelöscht und noch n paar andere Sachen (neue FlashScreen-Textur (TGA), Texturmanager) im Hauptmenü geändert. Und seit dem spielt alles verrückt!
Der 2. Witz an der Sache is: Wenn ich z.B.: im FormCreate einen neuen Player erstell, mit fFont und fSpeechBubble stürzt er da nich ab?!

Ich bin echt ratlos! Blickt da jmd durch? Wäre geil wenn ich endlich weiter komm. sitz schon die ganze Nacht dran -.-

MfG Bergmann.

p.s.: Was mir grad noch einfällt: Alle Fonts die ich im Hauptmenü benutz gehen!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 18, 2008 13:49 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Also ich kann so nur vermuten, dass die Fontdatei scheinbar nicht richtig geladen wurde. Stelle mal bitte sicher, dass die Datei die du laden möchtest auch wirklich existiert und gültig ist. Unter Windows genügt dort ein Doppelclick auf die Datei, dann öffnet sich so ein Fenster was den Name/Copyright und ein paar Zeilen Text darstellt.

Wenn das alles stimmt, dann schicke mir bitte mal genau diese Datei. Meine email adresse findest du auf der Teamseite. Dann schaue ich sie mir mal selber an.

Warum die Änderung mit "TSpeechBubble.Create" allerdings irgend etwas verändern kann ich so nicht sehen, da du dazu keinen Code gepostest hast. An den von dir genannten Stellen versuche ich einen Buffer zu erstellen um Daten des Fonts zu erfragen.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 18, 2008 16:53 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
HI,

die *.ttf geht, is die Standart-Datei "C:\WINDOWS\Fonts\comic.ttf" für "Comic Sans MS".
Aber an der Datei kanns ja net liegen, weil ja die Font im Hauptmenü gehen, oder??
naja ich schick dir trotzdem ma ne Mail....


TSpeechBubble.Create:
Code:
  1. constructor TSpeechBubble.Create(FontContextID: tsContextID; FontFileName: String; FontWidth: Integer; TextColor: TTextColor);
  2. var i: Integer;
  3. begin
  4.   inherited Create;
  5.  
  6.   fFontFileName  := FontFileName;
  7.   fFontWidth     := FontWidth;
  8.  
  9.   fH := 0;
  10.   fW := 0;
  11.   fMaxWidth  := 3;
  12.   fMaxHeight := 5;
  13.   fShowTime := 10000;
  14.   fTime := 10000;
  15.   fFirstRun := True;
  16.  
  17.   for i := 0 to 3 do fTextColor[i] := TextColor[i];
  18.  
  19.   tsContextBind(FontContextID);
  20.  
  21.   tsSetParameteri(TS_RENDERER, TS_RENDERER_OPENGL); CheckError;
  22.   tsSetParameteri(TS_CREATOR, TS_CREATOR_GDI); CheckError;
  23.   tsFontCreateCreator(pAnsiChar(fFontFileName), fFontWidth, TS_STYLE_NORMAL, TS_DEFAULT, TS_DEFAULT, @fFontID); CheckError;
  24.   tsPostAddShadow4f(1,0,0,1,1,1,0);
  25.  
  26.   [einige unwichtige variablen...]
  27. end;


MfG Bergmann.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 18, 2008 18:32 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Okay. Die Datei zu geht bei mir. Allerdings in deiner Aussage nicht ganz korrekt. Denn du hast als Creator den TS_CREATOR_GDI eingestellt. Der wiederrum arbeitet aber mit einer Fontdatei. Und den Dateinamen musst du dann als Name an tsFontCreateCreator übergeben. Diese Datei muss dann natürlich auch existieren.

Wenn du jetzt aber "Comic Sans MS" (was im Windows registriert ist) benutzen möchtest, dann brauchst du einen Creator der mit einem einem Facename klar kommt, also mit dem Namen des Fonts. Und das ist der Creator TS_CREATOR_GDI_FACENAME. Dann musst du aber auch "Comic Sans MS" als Name an tsFontCreateCreator übergeben.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Do Sep 18, 2008 22:19 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
ich übergeb den Dateinamen (comic.ttf)! Ich hab bloß so dazu geschrieben das es sich um den Font "Comic Sans MS" handelt, den es hätte ja auch sein können, das ich einen anderen Font habe, der Comic ähnlich aussieht und auch comic.ttf heißt ;-)
und es ging ja auch alles, bis ich im Hauptmenü einige sachen geändert hab, die aber an sich nix mit meinem TFont oder meiner TSpeechBubble zu tun haben?!


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Sep 19, 2008 08:46 
Offline
DGL Member
Benutzeravatar

Registriert: Do Dez 05, 2002 10:35
Beiträge: 4234
Wohnort: Dortmund
Ja okay. Das mit dem Fonts. Da gings mir nur darum, dass du sicher stellst, dass die Datei auch wirklich dort existiert wo sie geladen werden soll. ;)

Sonst muss ich gestehen kann ich dir gerade nicht sagen was daran schief läuft. Da würde ich dich bitte packe mal bitte dein komplettes Projekt und schicke es mir zu. Inklusive aller benötigten Quellen und Dateien (fonts, texturen). Da muss ich selber mal durchdebuggen und schauen wo es hängt. Natürlich nur wenn das für dich okay ist? Wird natürlich alles vertraulich behandelt. Je nachdem wie groß das Ganze ist kannst du das auch direkt an "info (at) opengl24 (punkt) de" schicken. Dann gehts nicht zu Lasten von Phobeus Server und direkt in mein Postfach. ;)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Fr Sep 19, 2008 13:57 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
HI,

e-Mail is unterwegs, an "info (at) opengl24 (punkt) de"

MfG Bergmann.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Sep 22, 2008 21:57 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
HI,

hab mit Lossy eX nochma durchgesehen. Auf jeden Fall lag es nicht an der TextSuite. Ich glaub es lag an den Texturen. Wenn ich anstatt ner TGA eine JPG geladen hab ging es. Und jetzt hab ich mir n neuen Texturloader besorgt, und seitdem hab ich keine Probleme mehr!

MfG Bergmann.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Di Sep 23, 2008 21:09 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
glBitmap.pas soll gut sein. 8)

Ich glaub die wird auch von der Textsuite unterstützt. ;)

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mi Sep 24, 2008 20:18 
Offline
DGL Member
Benutzeravatar

Registriert: Di Apr 29, 2008 18:56
Beiträge: 1213
Programmiersprache: Delphi/FPC
jo, die hab ich auch geladen ^^


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 10 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 6 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.011s | 16 Queries | GZIP : On ]