Hallo,
ich arbeite gerade das Kapitel "The Spriteengine" durch und erhalte eine
EAccessViolation an Adresse: $00459CBB, Lesen von Adresse 0024.
Der Debugger hält in der
Unit AdDraws in der folgenden Prozedur auf der if-
Anweisung:
Delphi-Quellcode:
procedure TAdImage.Draw(Dest:TAdDraw;X,Y,PatternIndex:integer);
begin
if (Texture.Texture.Loaded) and (Dest.CanDraw) and (AdMesh <> nil) then
begin
SetCurrentColor(255);
if (PatternIndex < 0) then PatternIndex := 0;
if (PatternIndex > PatternCount-1) then PatternIndex := PatternCount-1;
DrawMesh(Dest, AdRect(X,Y,X+Width,Y+Height), Rects[PatternIndex],
0, 0, 0, bmAlpha);
end;
end;
Die Anwendung zeigt sich nicht an, ich erhalte stattdessen das Icon in der Taskleiste, das mir zeigt, das das Programm aktiv ist.
AUßerdem habe ich die Frage, wie groß das einzelne Bild ist. In der SetLine() Methode wird Start- und Enpunkt von 0..7 bzw 8..15 gesetzt, andererseits aber X = -96 bzw. Clientwidth + 96. Ich habe damit die Arbeitsweise der Methode noch nicht richtig verstanden. Was macht die SetLine() Methode?
Ist das bild 8 Pixel und der FRame 96 Pixel groß?
Die folgenden beiden Anweisungen stehen in der SetLine() Methode:
Delphi-Quellcode:
X:=ClientWidth + 96;
Y:=Clientheight - 96;
Ich verstehe nicht, warum ClientWidth addiert wird, um auf die neue Position zu kommen, bzw. ClientHeight subtrahiert wird, um auf die nächste Position zu kommen. Damit käme die Figur zwar, wenn sie rechts das Bild verlässt, links wieder rein, aber dann?
Die Anweisung Y:=Random(ClientHeight - 96) sagt mir, das die Figuren an zufälliger Position angezeigt werden sollen. Warum aber dann die Berechnung von X und Y mittels ClientWidth bzw ClientHeight?
Allerdings erhalte ich die o.g.
Exception und mein Programm zeigt gar nix an. Ist das ein bekannter Fehler in der Bibliothek, oder habe ich was falsch gemacht?
Falls der Fehler bei mir liegt, hier noch mein aktueller Quelltext. Es ist der Quelltext des Kapitels "My first picture" und zwar der Teil, wo die Datei "Boy.bmp" geladen wird und Einzelbilder angezeigt werden, oder halt eines der Einzelbilder an zufälliger Position. Kann ich aus o.g. Grund nicht testen. Wer kann mir weiter helfen?