Einzelnen Beitrag anzeigen

Edlmann

Registriert seit: 19. Nov 2010
212 Beiträge
 
#188

AW: Shape Wars - Version 1.0

  Alt 16. Apr 2011, 14:30
Mmh...so langsam regt mich Delphi echt auf ^^

Ich bin gerade dabei, eine im Quelltext implementierte Vektor-Font zu erstellen, damit das Flackern endlich verschwindet. Diese Funktioniert auch super, löst allerdings jedesmal, wenn ich an der Unit nix verändert habe (und auch manchmal wenn ich etwas verändert habe) eine Zugriffsverletzung aus, die ich absolut nicht nachvollziehen kann (vor allem da das ganze hin und wieder funktioniert). Ich hoffe dass mir jemand von euch helfen kann, denn ansonsten wird es bei der Textsuite mit dem Flackern bleiben, da ich schon mit dem Online-Highscore ähnliche Probleme hatte (habe dazu auch nen Thread hier in der DP gestartet, mir konnt niemand helfen), und mir eine zweite Unit wo dieser Fehler auftritt zu viel ist. Also hab ich mich entschlossen mal den Quelltext von meiner Vektorfont (teilweise) zu veröffentlichen, und schauen ob mir jemand von euch helfen kann.

Delphi-Quellcode:
unit VekFont;

interface

uses dglOpenGL, SysUtils, Dialogs;

type
  TLine = record
    x1, y1, x2, y2: Single;
  end;
  TSingleChar = record
    Length: Integer;
    Lines: array[0..6] of TLine;
  end;

procedure ResetAllLetters;
procedure SetupFont;
function SetUpLine(xx1, yy1, xx2, yy2: Single): TLine;
procedure RenderTextLine(Text: String; XPos, YPos, Size: Single);

var Letters: array[32..129] of TSingleChar;

implementation

procedure RenderTextLine(Text: String; XPos, YPos, Size: Single);
var x, i: Integer;
begin
 // Text := UpperCase(Text);
    glBegin(GL_LINES);
  for x := 0 to Length(Text) do
  with Letters[Ord(Text[x])] do
  begin
   for i := 0 to Length-1 do
   begin
     //Laut Compiler kommt hier die Exception her, funktioniert aber eig und ist Fehlerfrei in einer einzelnen Anwendung die nur die Font benutzt)
     glVertex2f(Lines[i].x1 * Size + XPos + Size * 5 * x, Lines[i].y1 * Size + YPos);
     glVertex2f(Lines[i].x2 * Size + XPos + Size * 5 * x, Lines[i].y2 * Size + YPos);
   end;
  end;
    glEnd;
end;

procedure ResetAllLetters;
var
  x: Integer;
  y: Integer;
begin
  for x := Low(Letters) to High(Letters) do
  begin
    Letters[x].Length := -1;
    for y := 0 to Length(Letters[x].Lines) do
    begin
      with Letters[x].Lines[y] do
      begin
        x1 := 0;
        x2 := 0;
        y1 := 0;
        y2 := 0;
      end;
    end;
  end;
end;

function SetUpLine(xx1, yy1, xx2, yy2: Single): TLine;
begin
  with Result do
  begin
    x1 := xx1;
    y1 := yy1;
    x2 := xx2;
    y2 := yy2;
  end;
end;

procedure SetupFont;
begin
  ResetAllLetters;
  //Space
  Letters[32].Length := 0;
  // !
  with Letters[33] do begin Length := 2; Lines[0] := SetUpLine(2, 0, 2, 1); Lines[1] := SetUpLine(2, 2, 2, 6); end;
  // Hier werden halt alle Buchstaben deklariert, sind insgesamt etwa 100 Stück, alle Fehlerfrei soweit

  end;

initialization SetupFont;

end.
Ich hoffe mal dass da einer von euch was findet was so einen Fehler verursachen könnte.
  Mit Zitat antworten Zitat