Autor |
Beitrag |
Bergmann89
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Di 23.09.08 15:08
HI,
ich hab seit gestern Nacht n ganz seltsames Problem. Ich erstell grad n 3D-Chat und hab Probleme bei meiner Sprechblase. Wenn ich die so erstell:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38:
| constructor TSpeechBubble.Create(FontContextID: tsContextID; FontFileName: String; FontWidth: Integer; TextColor: TVector4f; Texture: TglBitmap2D); var i: Integer; begin inherited Create;
fFontFileName := FontFileName; fFontWidth := FontWidth; fSpeechBubble := Texture;
fH := 0; fW := 0; fMaxWidth := 3; fMaxHeight := 5; fShowTime := 10000; fTime := 10000; fFirstRun := True;
for i := 0 to 3 do fTextColor[i] := TextColor[i];
tsContextBind(FontContextID);
tsSetParameteri(TS_RENDERER, TS_RENDERER_OPENGL); CheckError; tsSetParameteri(TS_CREATOR, TS_CREATOR_GDI); CheckError; tsFontCreateCreator(pAnsiChar(fFontFileName), fFontWidth, TS_STYLE_BOLD, TS_DEFAULT, TS_DEFAULT, @fFontID); CheckError; tsPostAddShadow4f(1,0,0,1,1,1,0);
TexRect[0].Top := 1; TexRect[0].Bottom := 0.75; TexRect[0].Left := 0; TexRect[0].Right := 0.25; TexRect[1].Top := 1; TexRect[1].Bottom := 0.75; TexRect[1].Left := 0.25; TexRect[1].Right := 0.75; TexRect[2].Top := 1; TexRect[2].Bottom := 0.75; TexRect[2].Left := 0.75; TexRect[2].Right := 1;
TexRect[3].Top := 0.75; TexRect[3].Bottom := 0.5625; TexRect[3].Left := 0; TexRect[3].Right := 0.25; TexRect[4].Top := 0.5; TexRect[4].Bottom := 0.5; TexRect[4].Left := 0.5; TexRect[4].Right := 0.5; TexRect[5].Top := 0.75; TexRect[5].Bottom := 0.5625; TexRect[5].Left := 0.75; TexRect[5].Right := 1;
TexRect[6].Top := 0.5625; TexRect[6].Bottom := 0; TexRect[6].Left := 0; TexRect[6].Right := 0.25; TexRect[7].Top := 0.5625; TexRect[7].Bottom := 0; TexRect[7].Left := 0.25; TexRect[7].Right := 0.3515625; TexRect[8].Top := 0.5625; TexRect[8].Bottom := 0; TexRect[8].Left := 0.3515625; TexRect[8].Right := 1; end; |
dann ist fShowTime = 1065353216.
Wenn ich die Zuweisung ganz ans ende des Constructors schreibe, dann gehts?!
Und ich hab nochwas seltsames entdeckt:
Um den Text mit meiner Sprechblase ausgeben zu lassen hab ich ne eigene Prozedur geschrieben, in der weder fTime, noch fShowTime benutz werden. So ruf ich die Prozedur auf:
Delphi-Quelltext 1:
| if fTime < fShowTime then TextOut(fText); |
Und trotzdem wird kein Text (nur die leer Sprechblase) ausgegeben, wenn die Zuweisung in Create korrekt ist, also wenn fShowTime = 10000 ist, funktioniert zwar die ausgabe, aber der Text wird nich angezeigt. Und wenn fShowTime nich 10000 is, dann wird alles korrekt ausgegeben, aber die Sprechblase wird nich wieder ausgeblendet.
Könnt ihr mein Problem erkennen, oder hab ich das zu verwirrent geschrieben? (bin grad tot müde^^)
Wäre nett wenn jmd n Vorschlag hat, bin am Ende mit meinem Latein.
MfG Bergmann
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 23.09.08 15:17
<Kristallkugel anwirf> scheint, dass Du ein paar grobe Initialisierungprobleme hast oder Du deine Variablen übschreibst, ach ja, zeile 382, spalte 18
|
|
Bergmann89 
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Di 23.09.08 15:27
HI,
ich weiß das ich Initialisierungsprobleme hab, deshalb hab ich ja das Thema geschrieben! Ich versteh bloß nich, dass die Variable die richtigen Werte enthält, wenn ich sie ans ende des Creators schreib. Und ich hab auch schon durchdebuggt und die Zeile fTime := 10000 und fShowTime := 10000 wird auf alle fälle abgearbeitet!
MfG Bergmann.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
Wolle92
      
Beiträge: 1296
Windows Vista Home Premium
Delphi 7 PE, Delphi 7 Portable, bald C++ & DirectX
|
Verfasst: Di 23.09.08 15:39
was sagt dir denn der Debugger, was in der Variable drin steht, wenn die Zeile ausgeführt wird?
Und in welcher Zeile ändert sich der Wert wieder?
Hm, ich weiß nicht genau, ob man das direkt zu sehen bekommen kann bei D7...
_________________ 1405006117752879898543142606244511569936384000000000.
|
|
Bergmann89 
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Di 23.09.08 15:47
Also ich wüsst jetzt auch ncih wie das gehen soll^^
aber ich hab mir die Variablen nach der zuweisung mal als MessageBox ausgeben lassen.
direkt danach haben sie die korrekten erte, und am ende wieder falsch...
ich guck dann nochma durch. muss erstma los...
danke schonma für die hilfe!
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
matze
      
Beiträge: 4613
Erhaltene Danke: 24
XP home, prof
Delphi 2009 Prof,
|
Verfasst: Di 23.09.08 16:38
doch das geht auch in Delphi 7 im Debugger, da bin ich mir relativ sicher.
Man kann so einen Watch-Ausdruck auf die Variable legen.
Aber im Debugger müsstest du doch eigentlich sehen, wann sich der Inhalt ändert, wenn du den Code zeilenweise durchgehst...
_________________ In the beginning was the word.
And the word was content-type: text/plain.
|
|
Bergmann89 
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Di 23.09.08 17:39
HI,
hab mal durchprobiert: nach for i := 0 to 3 do fTextColor[i] := TextColor[i]; is fShowTime nich mehr 10000.
Und nochwas neben bei: wo find ich den richtigen debuger, hab das bis jetzt immer nur mit "Einzellne Anweisung" durchdebuggt, und mir die Variablen als Message ausgeben lassen
MfG Bergmann.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
Boldar
      
Beiträge: 1555
Erhaltene Danke: 70
Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
|
Verfasst: Di 23.09.08 18:40
Ansicht-->Debug-Fenster-->Lokale Variablen
oder (bei mir) STRG+ALT+L
|
|
Grenzgaenger
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Di 23.09.08 18:52
alternativ z.b. debug informationen in datei oder, memo, oder... ausgeben lassen.
wenn ich mich recht erinnere, läuft das mit den watchpoints seit TP4
da ich immer noch meiner kristallkugel verlegt hab, musst schon selbst den debugger quälen...
|
|
Bergmann89 
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Di 23.09.08 22:08
Boldar hat folgendes geschrieben: | Ansicht-->Debug-Fenster-->Lokale Variablen |
gibts bei mir net...
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
SvenAbeln
      
Beiträge: 334
Erhaltene Danke: 3
|
Verfasst: Mi 24.09.08 01:21
Bergmann89 hat folgendes geschrieben: | Boldar hat folgendes geschrieben: | Ansicht-->Debug-Fenster-->Lokale Variablen |
gibts bei mir net... |
Die Delphi 7 Personal war gerade beim Debugger etwas eingeschränkt.
Aber Delphi bietet noch weitere Möglichkeiten den Wert einer Variabel anzuzeigen.
1. Mauszeiger über die Variable, es öffnet sich ein Hint mit dem Wert. (Fehlt glaube ich auch in D7 Personal)
2. Cursor über Variable und Strg + F5, Variable wird ins Fenster "Überwachte Ausdrücke" eingetragen.
3. Cursor über Variable und Strg + F7, "Auswerten/Ändern". Wert wird angezeigt und kann verändert werden.
Hiermit kann man beim schrittweise debuggen immer die Werte überprüfen, ohne exta Messages auszugeben.
Also mal Haltepunkte setzten und dann Schritt für Schritt nachvollziehen wann der Wert wieder geändert wird.
|
|
jaenicke
      
Beiträge: 19313
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Mi 24.09.08 03:01
Bergmann89 hat folgendes geschrieben: | hab mal durchprobiert: nach for i := 0 to 3 do fTextColor[i] := TextColor[i]; is fShowTime nich mehr 10000. |
Das sieht dann doch sehr danach aus als würdest du da irgendwo Speicher überschreiben, der gar nicht der richtige ist. Zum Beispiel passiert sowas, wenn du auf ein Element eines dynamischen Arrays zugreifst, dass es gar nicht gibt, weil der benutzte Index zu groß ist.
|
|
Bergmann89 
      
Beiträge: 1742
Erhaltene Danke: 72
Win7 x64, Ubuntu 11.10
Delphi 7 Personal, Lazarus/FPC 2.2.4, C, C++, C# (Visual Studio 2010), PHP, Java (Netbeans, Eclipse)
|
Verfasst: Mi 24.09.08 16:46
hm,
das einzige was mir jetzt dazu einfällt is: ich hab ein dyn. Array (wo die Player "abgelegt" sind), und das is z.B. 5 Elemente lang. und Element 1 und 2 sind aber nil. Aber vor jedem zugriff auf das Array frag ich mit Assigned(fPlayerList.Player[X]); ab, ob das Element vorhanden is? Könnte dass das Problem verursachen?
Ich hab jetzt mal die Unit die sich mit den Sprechblasen beschäftigt neu geschrieben (war nich viel, ne halbe Stunde Arbeit) und seit dem hab ich keine Probleme mehr gehabt.
MfG Bergmann.
_________________ Ich weiß nicht viel, lern aber dafür umso schneller^^
|
|
|