Registriert: Sa Jan 04, 2003 21:23 Beiträge: 674 Wohnort: Köln
also... mit deinem Array stimmt immer noch was nicht... du musst die Länge wie folgt bestimmen/festlegen... <!--pas--></span><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>Delphi-Source </td></tr><tr><td id='CODE'><!--pas1--><pre> <span class='reserved'>for</span> k:=<span class='integer'>0</span> <span class='reserved'>to</span> (breite) <span class='reserved'>do</span> <span class='reserved'>begin</span> setlength(Feld[k],hoehe+<span class='integer'>1</span>); <span class='reserved'>end</span>;</pre><!--pas2--></td></tr></table><span class='postcolor'><!--pas3--> dann ist dein array, so wie du es haben willst... du musst dann den einzelnen array-Zellen einen Wert (MAuer...) geben und dann musst mal weiterschauen...
Registriert: Mo Sep 23, 2002 19:27 Beiträge: 5812
Programmiersprache: C++
Fiji-Fighter hat geschrieben:
also... mit deinem Array stimmt immer noch was nicht... du musst die Länge wie folgt bestimmen/festlegen...
Code:
for k:=0 to (breite) do
begin
setlength(Feld[k],hoehe+1);
end;
dann ist dein array, so wie du es haben willst... du musst dann den einzelnen array-Zellen einen Wert (MAuer...) geben und dann musst mal weiterschauen...
Wenn du dir den Code angesehen hättest, den ich gepostet habe, dann hättest du gesehen, das ich genau das mache und es angeblich nicht funktioniert hab (obwohl ich das auch immer so mache).
Deshalb würd ich an Maris Stelle (ich sags heut schon zum zweiten Male) die Debugging-Fähigkeiten der Delphi-IDE nutzen, mit der sich solche Probleme im Handumdrehen lokalisieren und beheben lassen.Das Watchfenster und die anderen Debugwerkzeuge sollte man unbedingt nutzen, denn spätestens bei großen Projekten sind diese eine unersetzbare Hilfe!
Ich habe jetzt wie von Son of Satan vorgeschlagen die Debug-Werkzeuge verwendet, ich weiß jetzt allerdings nicht viel mehr als vorher. Hier ist alles was ich weiß: Die Speicherung der Werte in das Array klappt problemlos, die Exception tritt definitiv erst bei der Abfrage "if Feld[i,j] = Mauer then" (Zeile 254 falls ihr den Code habt) auf, da die Werte scheinbar nicht mehr ausgelesen werden können. Hierbei spielt es jedoch keine Rolle, wie groß das Array ist und ob es Werte beinhaltet oder nicht. Wenn ich das dynamische Array am Anfang z.B. mit 1000,1000 initialisiere tritt der Fehler auf, wenn ich aber ein statisches Array mit 1000,1000 verwende dann nicht.
P.S.: Durch die Aktivierung der Bereichs- und der Überlaufsprüfung ändert sich an der Meldung nichts.
@KidPaddle: An der fehlenden Datei soll's nicht scheitern : <a href='http://www.cfxweb.net/~delphigl/files/GLAux.zip' target='_blank'>http://www.cfxweb.net/~delphigl/files/GLAux.zip</a> (Ich hoffe das ist die richtige)
Registriert: Mo Jan 20, 2003 20:10 Beiträge: 424 Wohnort: nähe Starnberg
Hi,
aslo der Fehler liegt in der Funktion LoadGLTextures. Dort machst Du den Aufruf der Funktionen:
Code:
glGenTextures(1, texture[texnumber]);
glBindTexture(GL_TEXTURE_2D, texture[texnumber]);
Dies würde funktionieren, wenn die Arrays mit 0 starten. Da Du aber die Eigenart hast, deine Arrays mit 1 zu starten, müssen die Zeilen wie folgt lauten:
Ich würde an deiner Stelle davon Abstand nehmen, da Du sonst noch häufiger in solche Probleme läuft.
Wie habe ich es raus gefunden? Ganz einfach, Watch-Fenster auf die Variable Feld gesetzt und 2 Breakpoints nach Ladekarte und am Anfang DrawScene gesetzt. Nach dem Aufruf von Ladekarte enthielt die Variable Feld gültige Werte, aber in DrawScene nicht mehr. Also passierte etwas dazwischen. Also die Methode FormCreate mit Einzelschritt durchlaufen bis die Variable Feld keine korrekte Werte mehr enthielt. Dies war nach dem Aufruf der Funktion LoadGLTextures. Nun nur noch reintrace und die genaue Zeile lokalisieren. Und das wars.
KidPaddle
PS.: Warum nutzen hier soviele globale Variabeln? Da hat man eine OOP Sprache und alles steht, wie zu TP Zeiten, als globale Variable in den einzelnen Units.
Vielen Dank, jetzt funktioniert es. Ich kapiere allerdings immer noch nicht warum. Mein Array hat doch eigentlich absolut nichts mit dem Laden von Texturen zu tun, warum löscht die LoadGLTextures (Die ich übrigens nicht selber geschrieben habe, bisher aber immer so funktioniert hat) Werte aus dem Feld-Array??? Naja, ist ja auch egal, hauptsache es funktioniert jetzt
P.S.: Das Programm ist so natürlich noch nicht fertig, ich definiere einfach am Anfang (fast) alle Variablen global
Registriert: Mo Jan 20, 2003 20:10 Beiträge: 424 Wohnort: nähe Starnberg
Das Poblem liegt darin, das der Wert texnumber beim Aufruf der Funktion LoadGLTextures den Wert 0 hat. Somit greifst Du auf dein Array mit texture[0] zu. Du hast aber dieses Array so definiert, das das erste Array - Element bei 1 ist, ein Element texture[0] gibt es nicht. Da normalerweise die Bereichsgrenzenprüfung aus Geschwindigkeistgründen abgeschaltet ist, erzeugt der Compiler auch keine Fehler.
Also übergibst Du der Funktion glGenTextures einen Pointer auf einen nicht definierten Speicherplatz und erzeugt so den Fehler.
Mitglieder in diesem Forum: 0 Mitglieder und 5 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.