Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   [Andorra2D] Mausklick (https://www.delphipraxis.net/135980-%5Bandorra2d%5D-mausklick.html)

Scater90 21. Jun 2009 15:18


[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:
TSpriteEngine.GetSpriteAt(x , y)
allerdings steh ich, wie schon erwähnt, etwas auf dem Schlauch wie ich dies wo anwende :|


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

igel457 21. Jun 2009 16:42

Re: [Andorra2D] Mausklick
 
Hallo,

Delphi-Quellcode:
TSpriteEngine.GetSpriteAt(x , y)
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:

Delphi-Quellcode:
var
  spr: TSprite;
begin
  spr := SpriteEngine.GetSpriteAt(MouseX, MouseY);
  if (spr <> nil) and (spr is TMeineCharakterklasse) then
  begin
    TMeineCharakterklasse(spr).TuEtwas;
  end;
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:

Delphi-Quellcode:
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;
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: http://www.delphi-treff.de/tutorials...shkurs/page/8/

Hoffe dir geholfen zu haben,
Andreas

Scater90 21. Jun 2009 17:19

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:
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;
Wobei ich THolzfaeller ganz nach deinem Tutorial mit THolzfaeller = class(TImageSPrite) usw programmiert habe.

MfG Stefan

igel457 21. Jun 2009 18:08

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.

Scater90 21. Jun 2009 18:33

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 13:08 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz