Delphi-PRAXiS
Seite 68 von 103   « Erste     1858666768 697078     Letzte »    

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Andorra 2D [Ver. 0.4.5.1, 31.12.08] (https://www.delphipraxis.net/81314-andorra-2d-%5Bver-0-4-5-1-31-12-08%5D.html)

I.A 23. Jun 2008 22:09

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:
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?

delphifan2004 24. Jun 2008 08:41

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

igel457 24. Jun 2008 09:30

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

I.A 24. Jun 2008 12:07

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:
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;
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.

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:
     AdImageList.Find('figur').Draw(AdDraw,round(X),round(Y),round(Pattern));
Mit dieser Methode wird das Einzelbild gesucht. Aber wo ist der Index in die Liste?
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.

igel457 24. Jun 2008 12:23

Re: Andorra 2D [Ver. 0.35, 04.03.08]
 
"StartPt und EndPt" steht für "StartPattern und EndPattern" und soll die aktuelle Animation spezifizieren.

inherited 24. Jun 2008 12:45

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.

Diamondback2007 24. Jun 2008 23:28

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.

igel457 25. Jun 2008 08:30

Re: Andorra 2D [Ver. 0.35, 04.03.08]
 
It's not a bug, it's a feature

Diamondback2007 25. Jun 2008 08:32

Re: Andorra 2D [Ver. 0.35, 04.03.08]
 
Will ich ja mal nicht hoffen ;)
Sollte aber wahrscheinlich kein Problem sein zu beheben oder?

igel457 25. Jun 2008 08:51

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.
Seite 68 von 103   « Erste     1858666768 697078     Letzte »    

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