Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Helikopter-spiel (https://www.delphipraxis.net/157465-helikopter-spiel.html)

Tim1993 12. Jan 2011 16:21

Helikopter-spiel
 
Hey Leute,


Ich brauche dringen hilfe bei der Kolisionsabfrage zweier obejekte, wobei beide objekte rechteckig sind....

Ich danke jetzt schon mal jedem der mir hilft :wink:

mkinzler 12. Jan 2011 16:22

AW: Helikopter-spiel
 
Was für Objekte? ( Shapes, Sprites, ...)

Tim1993 12. Jan 2011 16:24

AW: Helikopter-spiel
 
das sind zwei images die aufeinander zufliegen

Deep-Sea 12. Jan 2011 16:25

AW: Helikopter-spiel
 
Überprüfen ob ein rectangle ein anderes überlappt :roll:

(Aber verständlich, dass man den Thread nicht findet, der ist immerhin schon ein paar Minuten alt!)

Tim1993 12. Jan 2011 16:30

AW: Helikopter-spiel
 
und wie macht man das?... ich hab schon einige versuche mit einer if-anweisung -wo ich den bereich angegeben habe- gemacht funktioniert aber leider nicht....

p.s.: Ich bin anfänger...:)

mquadrat 12. Jan 2011 16:32

AW: Helikopter-spiel
 
Na dann zeig doch mal dein If.

Alternativ ist in dem verlinkten Thread sogar ein Beispiel mit Images drin...

Tim1993 12. Jan 2011 16:34

AW: Helikopter-spiel
 
Zitat:

Zitat von mquadrat (Beitrag 1074279)
Na dann zeig doch mal dein If.

Alternativ ist in dem verlinkten Thread sogar ein Beispiel mit Images drin...

Delphi-Quellcode:
function Treffer (hindernishöhe, hindernisweite,hubschrauberweite,
                  hubschrauberhöhe :integer):boolean;
var i1,i2 : integer;
    getroffen1,getroffen2,explosion : boolean;
Begin
  getroffen1 := false;
  getroffen2 := false;
  explosion := false;
  for I1 := -40 to 40 do
      Begin
         if ( (hindernishöhe + -40 >= hubschrauberhöhe - 40) and
              (hindernishöhe + +40 <= hubschrauberhöhe + 40) ) then
                Begin
                  getroffen1 := true;
                End else
                Begin
                  getroffen1 := false;
                End;
      End;
  for I2 := 0 to 46 do
      Begin
         if ( (hindernisweite + 0 >= 0 ) and
              (hindernisweite + 46 <= hubschrauberweite + 46) or
              (hindernisweite= 46) ) then
                Begin
                  getroffen2 := true ;
                End else
                Begin
                  getroffen2 := false;
                End;
      End;
  If ( (getroffen1 = true) and (getroffen2 = true) ) then
    bEGIN
      explosion := true;
    end;
  result := explosion;
End;

Deep-Sea 12. Jan 2011 16:37

AW: Helikopter-spiel
 
Benutze doch bitte die [DELPHI]-Tags für deinen Code, danke.

Und wo nutzt du da bitte IntersectRect? ...

Tim1993 12. Jan 2011 16:41

AW: Helikopter-spiel
 
Was ist den IntersectRect bitte?

Deep-Sea 12. Jan 2011 16:42

AW: Helikopter-spiel
 
Hast du den von mir in Post #4 verlinkten Thread überhaupt angeguckt, oder einfach mein komplettes Post ignoriert? :shock:

mquadrat 12. Jan 2011 16:43

AW: Helikopter-spiel
 
Was machen denn die zwei for-Schleifen da drin?! Du greifst doch nirgendwo auf den Index zu.

Ich nehme mal an, die Parameter stellen die x und y Werte der Mittelpunkte der Objekte dar und die Objekte haben jeweils 92x80 Pixel?

Also ich würde das wirklich in TRect umwandeln und IntersectRect verwenden (siehe verlinkter Thread!!!!). Wird das einfachste sein.

Tim1993 12. Jan 2011 16:51

AW: Helikopter-spiel
 
doch den Thread hab ich mir angesehen aber ich ich habs nicht verstanden...
ich ken IntersectRect und TRect nicht :(

hans ditter 12. Jan 2011 17:17

AW: Helikopter-spiel
 
Wow, also, dass ist schon ziemlich heftig...
Erstmal: Wenn du einen boolean-Ausdruck schon auf false gesetzt hast und es dabei belassen willst, dann bruachst du den nicht nochmal false setzten:
Delphi-Quellcode:
getroffen1 := false;
{...}
End else
Begin
   getroffen1 := false;//dass kannst du weglassen!!
End;
Dann versteh ich auch nicht, wie du auf deine If-Abfrage kommst. Wenn du ein Hinderniss von der Höhe h hast und dein Helikopter, der in der Höhe H fliegt, dann kannst du doch einfach so abfragen, ob di kollidiert sind(ungeprüft):
Delphi-Quellcode:
if (H = h) OR
   (H < h) then
explosion:=true;
Du musst doch einfach nur abfragen, ob die Flughöhe gleich oder niedriger als die Gesamthöhe des Hindernisses ist.
Wenn du dann noch auf links und rechts dran vorbeifliegen prüfen willst, dann musst du da eben noch die Koordinaten des Hindernisses mit in die If-Abfrage einbauen.
Wird dann ein wenig Schreibarbeit (vor allem musst du auf die richtige Verwendung der Klammern achten), aber dass ist auch nicht so schwer. Musst dir nur überlegen, wie das bei dir zusammenhängt.

@DeepSea: Ja, scheint so... und: ich hab ja erst nicht geglaubt, dass der andere Thread wirklich erst ein paar Min alt ist, ist ja aber wirklich so... :shock:

LG, hans ditter

DP-Maintenance 12. Jan 2011 20:46

Dieses Thema wurde am "12. Jan 2011, 21:46 Uhr" von "Luckie" aus dem Forum "Neuen Beitrag zur Code-Library hinzufügen" in das Forum "Multimedia" verschoben.

DeddyH 13. Jan 2011 07:11

AW: Helikopter-spiel
 
Zitat:

Zitat von Tim1993 (Beitrag 1074292)
doch den Thread hab ich mir angesehen aber ich ich habs nicht verstanden...
ich ken IntersectRect und TRect nicht :(

Und was hält Dich davon ab, in dem Fall einfach mal die Hilfe zu bemühen und nachzulesen? Falls Deine lokale Hilfe nicht funktionieren sollte, gibt es auch noch die DP-Referenz als Informationsquelle.

Bummi 13. Jan 2011 08:13

AW: Helikopter-spiel
 
eine trial and error Mentalität zwischendurch hat noch keinem Entwickler geschadet


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:16 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