![]() |
GetSpriteAt-Problem bei Andorra 2D
Gudden Tag,
ich habe mich heute wieder in meinem Andorra 2D Projekt versucht. Soweit funktionierte alles bis das Problem mit dem Interagieren kam. Das Spiel soll ein 2D Spiel aus der Vogelperspektive werden. Wenn der Held vor einem Objekt steht und man eine Taste drückt soll eine Prozedur vom Objekt ausgeführt werden, wobei es jedoch universell gehalten werden soll. Da sollte der GetSpriteAt Befehl aushelfen, jedoch gibt's da die Probleme. Die Funktion findet nämlich nichts an der entsprechenden Stelle, selbst wenn ich die Koordinaten direkt eingebe. Gibt es vielleicht andere Möglichkeiten zum Interagieren oder hat jemand Erfahrung mit dem Problem? Hier die wichtigen Quellcodeteile:
Delphi-Quellcode:
TObjekt = class(TImageSprite)
private protected public procedure UseObject; virtual; abstract; end; TStein = class(TObjekt) private protected public constructor Create(AParent: TSprite); override; procedure UseObject; override; end; ... TForm1 = class(TForm) procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); procedure FormKeyDown(Sender: TObject; var Key: word; Shift: TShiftState); procedure FormKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState); private { Private-Deklarationen } public AdDraw: TAdDraw; AdPerCounter: TAdPerformanceCounter; AdImageList1: TAdImageList; AdSpriteEngine: TSpriteEngine; Selected: TSprite; procedure Idle(Sender: TObject; var Done: boolean); { Public-Deklarationen } end; ... procedure TForm1.FormKeyDown(Sender: TObject; var Key: word; Shift: TShiftState); begin if key = 32 then begin Selected := AdSpriteEngine.GetSpriteAt(150,500); if Selected <> nil then begin TObjekt(Selected).UseObject; TestVar := 1; end else begin TestVar := 2; Selected := nil; end; end; |
AW: GetSpriteAt-Problem bei Andorra 2D
Sind das Bildschirmkoordinaten oder wurde die Position bereits auf dein Fenster umgerechnet?
Am besten mal mit dem Debugger bei GetSpriteAt anhalten und sich die Koordinaten des Helden ausgeben lassen. So ist es unabhängig von deinem aktuellen Problem sicherer:
Delphi-Quellcode:
if Selected is TObjekt then
begin TObjekt(Selected).UseObject; |
AW: GetSpriteAt-Problem bei Andorra 2D
So,
erstmal sorry für die verspätete Antwort. Aber das Überprüfen hat mich stutzig gemacht. Ersteinmal haben die Koordinaten des Helden in kein Bild gepasst: es sind keine Bildschirmkoordinaten, aber es können auch keine Koordinaten sein, die von der SpriteEngine benutzt werden (falls du das mit "auf Fenster umgerechnet" gemeint hast), da komplett andere Werte ausgegeben werden, wenn der Held sich über dem Sprite befindet, das ich exakt auf (150|100) gesetzt hab. Aber der GetSprite Befehl scheint sich auf Bildschirmkoordinaten zu beziehen. Verwirrender wird es jetzt, wenn man sieht wie ich darauf gekommen bin. Wenn ich jetzt z.b. die Koordinaten auf (20|20) gesetzt hab, eine andere Figur gerade dort war (vom Tutorial, Code ist unten) und ich die entsprechende Taste gedrückt hab, schmeißt der Compiler die Fehlermeldung "External: SIGSEGV" aus. Ich dachte erst, dass es an der fehlenden Prozedur der Figur liegt, aber als ich einfach mal eine leere Prozedur für die Klasse erstellt hab kam noch die gleiche Meldung.
Delphi-Quellcode:
TFigur = class(TImageSprite)
private protected procedure DoMove(TimeGap: double); override; public XSpeed: integer; constructor Create(AParent: TSprite); override; procedure SetLine; procedure UseObject; end; |
AW: GetSpriteAt-Problem bei Andorra 2D
So,
hat sich inzwischen von selbst gelöst. Die Koordinaten des GetSprite-Befehls waren wirklich die Bildschirmkoordinaten und es war nur ein kleiner Denkfehler mit drin, der sich durch einsetzen der "WorldX"- und "WorldY"-Variablen lösen konnte, wobei aber die beschriebene Fehlermeldung auch nur ein Produkt des Denkfehlers war :roll:. Die Koordinaten der Sprite-Engine haben dann letztendlich auch gepasst. In dem Fall hatte ich übersehen, dass die Y-Achse nach unten in positiver und nicht negativer Richtung geht |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:45 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