AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

[Andorra2D] Mausklick

Ein Thema von Scater90 · begonnen am 21. Jun 2009 · letzter Beitrag vom 21. Jun 2009
Antwort Antwort
Scater90

Registriert seit: 20. Jun 2009
3 Beiträge
 
#1

[Andorra2D] Mausklick

  Alt 21. Jun 2009, 16:18
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
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?
Dann könnte ich meine Grundlage behalten und darauf weiter aufbauen.

Entschuldigt mir bitte mein Unwissen

Mit freundlichen Grüßen Stefan
Saarland, das Beste am Süden!
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

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

Re: [Andorra2D] Mausklick

  Alt 21. Jun 2009, 17:42
Hallo,

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
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
Scater90

Registriert seit: 20. Jun 2009
3 Beiträge
 
#3

Re: [Andorra2D] Mausklick

  Alt 21. Jun 2009, 18:19
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
Saarland, das Beste am Süden!
  Mit Zitat antworten Zitat
Benutzerbild von igel457
igel457

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

Re: [Andorra2D] Mausklick

  Alt 21. Jun 2009, 19:08
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.
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
Scater90

Registriert seit: 20. Jun 2009
3 Beiträge
 
#5

Re: [Andorra2D] Mausklick

  Alt 21. Jun 2009, 19:33
Juhu es funktionier!

Klar, hab das AdSpriteEngine getauft.
Und bei meinem mouse.cursorpos.y war der Punkt immer ~50 Pixel über dem Sprite, mit nur x,y klappt das nun auch einwandfrei
Vielen Dank für die Hilfe, du hast die Puzzleteile zusammengesetzt nun kann ich endlich weiter programmieren *freu*

Ne schöne neue Woche!
Saarland, das Beste am Süden!
  Mit Zitat antworten Zitat
Antwort Antwort


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 18:33 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