![]() |
[Andorra2D] Mausklick
Einen wunderschönen Sonntag Nachmittag!
An dieser Stelle schonmal Danke, ihr habt mir in der Vergangenheit schon viele male durch bereits bestehende Threads geholfen, bei diesem Problem muss ich allerdings doch mal nachfragen. Hab mir Andorra2D geholt und hänge nun an den "Mausklick"-Problem. Will ein Aufbauspiel programmieren, d.h. verschiedene Sprites (Einheiten) haben verschiedene Funktionen, bei mir hängts allerdings schon bei der Wahrnehmung auf welchen Sprite geklickt wurde. Die Lösung befindet sich wahrscheinlich im
Delphi-Quellcode:
allerdings steh ich, wie schon erwähnt, etwas auf dem Schlauch wie ich dies wo anwende :|
TSpriteEngine.GetSpriteAt(x , y)
Eine zweite Sache wäre: Ich hab das Spiel zuvor schonmal ohne Andorra2D angefangen mit einer dynamischen Datenstrucktur, hab es aber bisher noch nicht geschafft die Sprites in diese Strucktur einzugliedern, könnte mir da eventuell auch noch jemand auf die Sprünge helfen? :thumb: Dann könnte ich meine Grundlage behalten und darauf weiter aufbauen. Entschuldigt mir bitte mein Unwissen :) Mit freundlichen Grüßen Stefan |
Re: [Andorra2D] Mausklick
Hallo,
Delphi-Quellcode:
ist auf jeden Fall die richtige Prozedur. "X" und "Y" geben hierbei die Bildschirmkoordinaten an. Wird kein Sprite gefunden wird "nil" zurück gegeben. Allerdings gibt "GetSpriteAt" nur das oberste Sprite zurück. Anwenden kannst du die Funktion zum Beispiel folgendermaßen:
TSpriteEngine.GetSpriteAt(x , y)
Delphi-Quellcode:
Alternativ gibt es auch die Funktion "GetSpritesAt": Diese gibt dir alles Sprites einer bestimmten Klasse, die an der bestimmten Bildschirmposition (unabhängig von der Z-Sortierung) zurück. Anwenden kannst du die Funktion folgendermaßen:
var
spr: TSprite; begin spr := SpriteEngine.GetSpriteAt(MouseX, MouseY); if (spr <> nil) and (spr is TMeineCharakterklasse) then begin TMeineCharakterklasse(spr).TuEtwas; end;
Delphi-Quellcode:
Wie schon in den Quelltexten angedeutet, solltest du die Objektorientierte Programmierung (OOP) verwenden: Dabei bildet jeder Objekttyp eine Klasse, die von TImageSprite abgeleitet ist. Wenn du dich damit nicht auskennst solltest du vielleicht vorher ein Tutorial zu OOP lesen:
var
lst: TSpriteList; i: integer; begin lst := TSpriteList.Create; SpriteEngine.GetSpritesAt(MouseX, MouseY, TMeineCharakterklasse); for i := 0 to lst.Count - 1 do begin TMeineCharakterklasse(lst[i]).TuEtwas; end; lst.Free; end; ![]() Hoffe dir geholfen zu haben, Andreas |
Re: [Andorra2D] Mausklick
Hi nochmal.
Danke für die schnelle Antwort. Damit ist das Problem mit der dynamischen Datenstrucktur weg, jetzt muss ich eben objektorientiert umdenken. Hab den Quellcode von dir mal eben eingebaut, es erschien jedoch folgende Fehlermeldung: "This form of method call only allowed for class methods" Hier nochmal der Quellcode von mir/dir:
Delphi-Quellcode:
Wobei ich THolzfaeller ganz nach deinem Tutorial mit THolzfaeller = class(TImageSPrite) usw programmiert habe.
procedure TForm1.FormMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); var spr: TSprite; begin spr := SpriteEngine.GetSpriteAt(mouse.CursorPos.x, Mouse.cursorpos.Y); //hier wird der Fehler //angezeigt if (spr <> nil) and (spr is THolzfaeller) then begin THolzfaeller(spr).x := 200; end; end; MfG Stefan |
Re: [Andorra2D] Mausklick
Hallo,
ist "SpriteEngine" auch wirklich der Bezeichner für deine Instanz der SpriteEngine-Engine? Außerdem kannst du anstatt "mouse.CursorPos.X" auch den dir in der Prozedur übergebenen "X/Y"-Parameter verwenden. |
Re: [Andorra2D] Mausklick
Juhu es funktionier!
Klar, hab das AdSpriteEngine getauft. :roll: Und bei meinem mouse.cursorpos.y war der Punkt immer ~50 Pixel über dem Sprite, mit nur x,y klappt das nun auch einwandfrei :thumb: Vielen Dank für die Hilfe, du hast die Puzzleteile zusammengesetzt nun kann ich endlich weiter programmieren *freu* :kiss: Ne schöne neue Woche! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:09 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