Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Koordinaten von einer Grafik (https://www.delphipraxis.net/69815-koordinaten-von-einer-grafik.html)

Z32 20. Mai 2006 13:10


Koordinaten von einer Grafik
 
Hallo,

ich hätte da eine Frage:

Bei einem kleinem selbstgemachten shooter [also oben ein kasten der sich sprunghaft bewegt, nicht gleichmäßig, und unten hat man ein schiff, mit dem man auf den kasten schießen soll] hab ich das Problem wie ich abfragen soll wann der Schuss auf den kasten trifft und wann nicht.
Ich habe mit gedacht, ich lese einfach die Kooradinaten des Bildes aus und sagen dann:

If Bildkoordinate = Kastenkoordinate then showmessage('Getroffen');

Geht das ??? Und wie kann ich die Koordinaten überhupt auslesen ???

PS: Ich habe schon oft etwas mit mousmove gehört, aber damit wir in meinem Fall das schiff bewegt.

pacman1986 20. Mai 2006 13:17

Re: Koordinaten von einer Grafik
 
wenn du nur einen punkt abfragst wäre das relativ sinnfrei. du solltest einen ganzen bereich abfragen! falls du images benutzen schau dir top, left, height und width an.

Z32 20. Mai 2006 13:23

Re: Koordinaten von einer Grafik
 
Ja ich benutze dafür ein Image, aber wie frage ich den ab, wo sich der Kasten und das Feuer gerade befindet ??? Also das mit Top,left,width,height ist mir klar, aber die stelle habe ich damit ja auch noch nicht gefunden, oder liege ich da falsch ?

Der_Unwissende 20. Mai 2006 16:29

Re: Koordinaten von einer Grafik
 
Hi,
also es gibt jetzt zwei Möglichkeiten, du kannst warten bis irgendwer hier zufällig richtig errät, wie dein Programm aufgebaut ist oder du könntest schon etwas mehr Infos posten.
Ich meine ist gar nicht so schwer, gehört zu Forenbeiträgen einfach dazu und erleichtert es einfach mal dir sinnvoll zu antworten.

Du hast einen hüpfenden Kasten und ein Schiff das schießt, schön. Gibt wohl um die zig-Tausend Möglichkeiten Beides zu implementieren, also:
Wie bewegst du deinen Kasten, wie dein Schiff, wie sieht dein Schuß aus? (einfach Code anhängen ist manchmal eine Idee)

Mal völlig losratend denke ich, dass sich dein Schiff nur auf einer Achse horizontal bewegt (und ein TImage ist) und der Kasten ein TImage (ging ja aus meinem Vorrater hervor ;-)), der hüpft. Ist der Schuß nun eine orthogonal zur Bewegungsachse des Schiffs laufende Gerade? Dann müsstest du nur schauen, ob die x Koordinate des Schusses (der wenn ich richtig liege alles auf der y-Achse trifft) sich innerhalb der Ausdehnungen des Kastens (zwischen Left und Left + Width) befindet.

Gruß Der Unwissende

Z32 20. Mai 2006 17:43

Re: Koordinaten von einer Grafik
 
Also...

Es tut mir ja sehr leid, wenn ich nicht genug Infos dazu geschrieben habe. Ich wusste nicht, dass ihr soviele Informationen braucht um mir zu helfen. Aber ich werde jetzt noch ein bischen zu dem Projekt schreiben.

Das Projekt:
Das Projekt ist ein kleiner Shooter für eine Person, es gibt ein Schiffchen das sich ganz unten auf der x-Achse mithilfe der Maus bewegen lässt. Klickt man auf die Linke Maustaste löst sich ein Schuss vorne aus dem Schiffchen und fliegt auf der y-Achse nach oben. Dann gibt es noch einen Kasten, der sich ganz oben auf der x-Achse bewegt, aber eben nicht gleichmäßig, sondern mal erscheint er da, mal da. Aber IMMER ganz oben auf der x-Achse.

Die Steuerung:
Das Schiffchen ist ein Image und ich steuere es mit einem Mousmove, also die Maus ist das Schiffchen und kann aber nur auf der x-Achse ganz unten bewegt werden.

Das Feuer ist auch ein Image und bleibt immer genau über dem Schiffchen, wenn man auf die Linke Muastaste drückt läd das Image das Feuerbild und bewegt sich auf der y-Achse nach oben. In der Zeit wo sich der Schuss löst, bis er aus dem Bild fährt ist dei Maus gespertt, damit man den Schuss nicht lenken kann, den wie gesagt befindet sich das Feuerimage immer über dem Schiffchen.

Der Kasten ist mit einem Timer gesteuert und auch ein Image. Der Timer erzeugt eine Zufalls Zahl und setzt den den Kasten neu. Die Zahl befindet sich natürlich immer unter 216, denn mein Form ist nur 216 Pixel breit.

Die Frage:
Wie kann ich abfragen wann das Feuerimage auf das Kastenimage trifft ???????


Also ich hoffe ich habe damit jetzt genug Infos gegeben.

Der_Unwissende 21. Mai 2006 10:29

Re: Koordinaten von einer Grafik
 
Sehen wir mal davon ab, dass du nicht gesagt hast wie sich der Schuss bewegt, hilft es auf jeden Fall deutlich weiter. Ich gehe hier einfach mal davon aus, dass du auch den Schuss über einen Timer steuerst?

An sich musst du nur schauen, was genau einen Treffer ausmacht. Treffen kannst du den Kasten nur, wenn der Schuß die richtige X- und Y-Position hat. Soweit war es dir sicherlich eh klar. Wichtig ist jetzt wann sind die richtig?
Da sich dein Kasten auf einer festen horizontalen Achse bewegt (X-Achse), ist seine verticale Position auch konstant (immer gleiche Y-Koordinate). Damit kannst du also schauen ob dein Schuss als Y-Position zwischen Kasten.Top und Kasten.Top + Kasten.Height liegt.
Für die x-Position gilt jetzt im Prinzip eigentlich das gleiche. Sobald der Schuss die richtige Y-Position hat, musst du zusätzlich prüfen, ob die x-Koordinate des Strahls im Bereich von Kasten.Left und Kasten.Left + Kasten.Width liegt. Das ist alles.
Machen musst du dass natürlich bei jeder Bewegung des Strahls (also die Abfrage), der Kasten kann ja auch während dessen weiter springen.

Z32 21. Mai 2006 12:43

Re: Koordinaten von einer Grafik
 
aha, soweit habe ich das Prinzip jetzt verstanden. Doch wie muss den jetzt diese Abfrage aussehen.
Also ich habe das so verstanden:


Delphi-Quellcode:
If Feuerimage = (kastenimage.top) and (kastenimage.left+kastenimage.height) then   //y Position abfrage
begin
If Feuerimage = (kastenimage.left) and (kastenimage.left+kastenimage.width) then showmessage('Getroffen');  //x Position Abfrage
end;
Aber ich glaube, dass das so nicht stimmt, bin im Thema bewegung mit Delphi noch nicht ganz so besonders gut. Könnte mir vielleicht nochmal wer darüber schauen und gucken ob ich das richtig umgesetzt habe ?

pacman1986 21. Mai 2006 13:17

Re: Koordinaten von einer Grafik
 
Du hast ihn Falsch Verstanden! So sollte es gehen:

Delphi-Quellcode:
If (Feuerimage.top < kastenimage.top) and (Feuerimage.top > kastenimage.top+kastenimage.height)   //y Position abfragen
   and (Feuerimage.Left > kastenimage.left) and (Feuerimage.Left > kastenimage.left+kastenimage.width)    //x Position abfragen
      Then begin
            //Kollision
      end;
Es Gibt Glaub ich aber ne elegantere Lösung habse aber vergessen

Z32 21. Mai 2006 14:44

Re: Koordinaten von einer Grafik
 
mhhhh...erstmal danke für das Code Beispiel.

Aber ich glaube der funst nicht. Zumindest nicht bei mir. Ich stell jetzt mal den Code von dem Timer rein, der den Schuss steuert.

Zur erklärung:


image2 = Feuerimage
image3 = Kastenimage
feuer = Variable mit Wert -5
zuruck = Variable mit Wert 1

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
BlockInput(true);
image2.Top:=image2.Top+feuer;
if (image2.top<image3.top) and(image2.top>image3.top+image2.Height)
and (image2.left>image3.left) and(image2.left>image3.left+image3.width)
then begin
showmessage('Getroffen');
end;
if image2.top<0 then
begin
repeat
image2.Top:=image2.Top+zuruck;
until image2.top=216;
image2.Picture := nil;
BlockInput(false);
timer1.Enabled:=false;
end;
end;
Vielleicht habe ich ja noch einen anderen Fehler drin, oder den Code von dem Beitrag vor mir falsch eingebaut.

pacman1986 21. Mai 2006 14:47

Re: Koordinaten von einer Grafik
 
:oops: hab ein > sttat ein kleiner gemacht

Delphi-Quellcode:
If (Feuerimage.top > kastenimage.top) and (Feuerimage.top < kastenimage.top+kastenimage.height)   //y Position abfragen
   and (Feuerimage.Left > kastenimage.left) and (Feuerimage.Left < kastenimage.left+kastenimage.width)    //x Position abfragen
      Then begin
            //Kollision
      end;
so sollte es funzen


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:17 Uhr.
Seite 1 von 2  1 2      

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