![]() |
Re: Andorra 2D [Ver. 0.35, 04.03.08]
Liste der Anhänge anzeigen (Anzahl: 1)
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:
Die Anwendung zeigt sich nicht an, ich erhalte stattdessen das Icon in der Taskleiste, das mir zeigt, das das Programm aktiv ist.
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; 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:
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?
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? 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? |
Re: Andorra 2D [Ver. 0.35, 04.03.08]
Hallo!
Hab grad mal wieder bissl hier rumgesurft und bin auf das Theme hier gestossen. Schnell Andorra runtergeladen und das erste Handbuch Kapitel durchgearbeitet. Funzt ja klasse. Wir werden bestimmt wieder voneinander hören. Hoffentlich bin ich dann aber einer derjenigen, die eine Frage zur Programmierung beantworten, staa selber Fragen zu stellen. Bis bald. Delphifan2004 |
Re: Andorra 2D [Ver. 0.35, 04.03.08]
@I.A
Die Namen in der ImageList sind CaseSensitive. Du musst immer die gleiche Groß- und Kleinschreibung verwenden |
Re: Andorra 2D [Ver. 0.35, 04.03.08]
Danke @igel457: Habe jetzt die Schreibweise angepasst und voila, die Anzeige funzt.
Jetzt will ich weiter machen und deshalb hier das nächste Problem: Ich verstehe die SetLine() Methode nicht vollständig, hier ist sie:
Delphi-Quellcode:
Ich nehme mal an, das die Figur 96 Pixel hoch und 96 Pixel breit ist. In die Breite geht der Bewegungsspielraum mit ein. Welcher Teil ist dann aber 8 Pixel breit? StartPt u. EndPt sagen mir das.
TForm1.SetLine;
begin XSpeed := -XSpeed; if XSpeed > 0 then begin StartPt := 0; //Den Zwck dieser Anweisungen EndPt := 7; //verstehe ich nicht! X := -96; end else begin StartPt := 8; //Den Zwck dieser Anweisungen EndPt := 15; //verstehe ich nicht! X := ClientWidth+96; end; Y := Random(ClientHeight-96); end; Wenn XSpeed < 0 ist, dann ist StartPt = 8 und EndPt = 15 und wenn XSpeed > 0 ist dann StartPt = 0 und EndPt = 7. Welche Bedeutung haben diese Anweisungen für die Bewegung der Figur. Ich sehe zwar im Quelltext der Methode die Anweisungen und weiß, was die machen, kann aber deren Sinn in Bezug auf die Bewegung der Figur nicht nachvollziehen. Kann mir jemand dabei helfen? Es bringt ja nix, wenn ichb jetzt das nächste Kapitel durcharbeite, ohne den Bewegungsablauf der Figur wirklich verstanden zu haben. Es wird eine Imageliste erzeugt. Da drin wird Platz für eine Figur geschaffen. Dann wird die Datei boy.bmp da rein geladen. Aber da drin sind alle Figuren, das heißt alle Einzelbilder, nicht nur eines davon. Woher weiß mein Programm, welches Einzelbild angezeigt werden soll
Delphi-Quellcode:
Mit dieser Methode wird das Einzelbild gesucht. Aber wo ist der Index in die Liste?
AdImageList.Find('figur').Draw(AdDraw,round(X),round(Y),round(Pattern));
Ich nehme an es ist 'Pattern' In der Liste mit dem Namen "figur" wird das Einzelbild gesucht. Ist meine Annahme richtig, das Pattern der Index in die Liste der Einzelbilder ist? Dann wären X und Y die Position der Figur auf dem Bildschirm. Wäre dem so, könnte ich ins nächste Kapitel gehen. Will aber noch mal rückfragen. Will es ja lernen. Habe auch die Diskussion "Hilfeverhalten im Forum" mitgekrigt. Und ich habe nicht vor, mir "meine Hausaufgaben machen zu lassen". Ich will es selber können. Wenn ich schon richtig liege mit meinen Annahmen, um so besser. Dann kann ich weiter machen mit dem nächsten Kapitel. |
Re: Andorra 2D [Ver. 0.35, 04.03.08]
"StartPt und EndPt" steht für "StartPattern und EndPattern" und soll die aktuelle Animation spezifizieren.
|
Re: Andorra 2D [Ver. 0.35, 04.03.08]
StartPt ist der erste Index der Animationsbilder, EndPt der Letzte. Wenn das Bild animiert wird, soll er ja nur die Animationsschritte anzeigen die zur aktuellen Bewegungsrichtung passen.
|
Re: Andorra 2D [Ver. 0.35, 04.03.08]
Liste der Anhänge anzeigen (Anzahl: 1)
Ich habe noch einen Bug gefunden.
Und zwar geht es um das GUI-System. Dort wird der Mauszeiger auch dann noch im Andorra Fenster angezeigt, wenn er das Fenster eigentlich schon verlassen hat. Im Screenshot kann man das eigentlich nicht sehen, da bei einem Screenshot der Mauszeiger nicht mit auf dem Bild ist. Er ist allerdings auf der Form zu sehen. Dort dürfte er nicht mehr sein. Das ganze ist beliebig reproduzierbar. |
Re: Andorra 2D [Ver. 0.35, 04.03.08]
It's not a bug, it's a feature
|
Re: Andorra 2D [Ver. 0.35, 04.03.08]
Will ich ja mal nicht hoffen ;)
Sollte aber wahrscheinlich kein Problem sein zu beheben oder? |
Re: Andorra 2D [Ver. 0.35, 04.03.08]
Der Fehler (der wie gesagt kein Fehler ist, von daher war das schon ernst gemeint) kommt einfach daher, dass das Andorra 2D interne Mauszeigersystem für die GUI verwendet wird. Das bedeutet, das die Mauszeiger kein Grafikkarten-Overlay-Sprite im eigentlichen Sinn sind, sondern (wie in jedem Spiel auch) komplett von der Engine gezeichnet werden. Dadurch können die Mauszeiger auch mit Alphablendeffekten sowie Animationen versehen werden. Da ich jedoch nur auf das MouseMove-Event des Fensters reagiere, bekomme ich keine Mauszeigerbewegung mehr mit, sobald der Mauszeiger das Fenster verlassen hat.
Lösung: Besorge dir jeden Renderschleifendurchlauf die aktuellen Zeigerkoordinaten (GetCursorPos, unit Windows), vergleiche diese mit den letzten, wenn sich diese verändert haben rechne Sie in Fensterkoordinaten um und rufe Manuell AdGUI.MouseMove auf. Allerdings sollte man meinen, das die meisten Spiele sowieso im Vollbildmodus ablaufen, da ist das dann egal. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:59 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz