AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Andorra 2D [Ver. 0.4.5.1, 31.12.08]
Thema durchsuchen
Ansicht
Themen-Optionen

Andorra 2D [Ver. 0.4.5.1, 31.12.08]

Ein Thema von igel457 · begonnen am 24. Nov 2006 · letzter Beitrag vom 14. Sep 2011
Antwort Antwort
Seite 68 von 101   « Erste     1858666768 697078     Letzte »    
I.A

Registriert seit: 14. Jan 2007
83 Beiträge
 
#1

Re: Andorra 2D [Ver. 0.35, 04.03.08]

  Alt 23. Jun 2008, 22:09
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?
Angehängte Dateien
Dateityp: pas main_165.pas (4,1 KB, 4x aufgerufen)
  Mit Zitat antworten Zitat
delphifan2004

Registriert seit: 26. Nov 2004
Ort: Dresden
279 Beiträge
 
Delphi 10.3 Rio
 
#2

Re: Andorra 2D [Ver. 0.35, 04.03.08]

  Alt 24. Jun 2008, 08:41
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
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#3

Re: Andorra 2D [Ver. 0.35, 04.03.08]

  Alt 24. Jun 2008, 09:30
@I.A
Die Namen in der ImageList sind CaseSensitive. Du musst immer die gleiche Groß- und Kleinschreibung verwenden
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
I.A

Registriert seit: 14. Jan 2007
83 Beiträge
 
#4

Re: Andorra 2D [Ver. 0.35, 04.03.08]

  Alt 24. Jun 2008, 12:07
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

     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.
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#5

Re: Andorra 2D [Ver. 0.35, 04.03.08]

  Alt 24. Jun 2008, 12:23
"StartPt und EndPt" steht für "StartPattern und EndPattern" und soll die aktuelle Animation spezifizieren.
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Benutzerbild von inherited
inherited

Registriert seit: 19. Dez 2005
Ort: Rosdorf
2.022 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Andorra 2D [Ver. 0.35, 04.03.08]

  Alt 24. Jun 2008, 12:45
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.
Nikolai Wyderka

SWIM SWIM HUNGRY!
Neuer Blog: hier!
  Mit Zitat antworten Zitat
Benutzerbild von Diamondback2007
Diamondback2007

Registriert seit: 2. Feb 2007
260 Beiträge
 
Delphi 2007 Professional
 
#7

Re: Andorra 2D [Ver. 0.35, 04.03.08]

  Alt 24. Jun 2008, 23:28
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.
Miniaturansicht angehängter Grafiken
bug_166.jpg  
Fabian E.
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#8

Re: Andorra 2D [Ver. 0.35, 04.03.08]

  Alt 25. Jun 2008, 08:30
It's not a bug, it's a feature
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Benutzerbild von Diamondback2007
Diamondback2007

Registriert seit: 2. Feb 2007
260 Beiträge
 
Delphi 2007 Professional
 
#9

Re: Andorra 2D [Ver. 0.35, 04.03.08]

  Alt 25. Jun 2008, 08:32
Will ich ja mal nicht hoffen
Sollte aber wahrscheinlich kein Problem sein zu beheben oder?
Fabian E.
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

Registriert seit: 31. Aug 2005
1.622 Beiträge
 
FreePascal / Lazarus
 
#10

Re: Andorra 2D [Ver. 0.35, 04.03.08]

  Alt 25. Jun 2008, 08:51
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.
Andreas
"Sollen sich auch alle schämen, die gedankenlos sich der Wunder der Wissenschaft und Technik bedienen, und nicht mehr davon geistig erfasst haben als die Kuh von der Botanik der Pflanzen, die sie mit Wohlbehagen frisst." - Albert Einstein
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 68 von 101   « Erste     1858666768 697078     Letzte »    


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:21 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