Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Klatsch und Tratsch (https://www.delphipraxis.net/34-klatsch-und-tratsch/)
-   -   Hilfe für Pacman-Projekt (https://www.delphipraxis.net/194783-hilfe-fuer-pacman-projekt.html)

KleinTessy 4. Jan 2018 14:10

Hilfe für Pacman-Projekt
 
Hallo,
Ich würde mich freuen wenn mir jemand bei meinem Projekt weiterhelfen könnte...
Ich möchte ein Spiel programmieren, dass ähnlich wie das Spiel Pacman sein soll...
Dafür habe ich verschiedene Icons verwendet...
Wenn Icon1 auf den auf Icon2 bewegt wird soll Icon2 verschwinden und eine Nachricht erscheinen
(also ähnlich wie wenn pacman von einem monster erwischt wird, oder diese gelben Dinger sammelt)
Bin noch ein Anfänger und kenne mich nicht so gut aus... über eine Antwort würde ich mich sehr freuen...

Lg Tessy

LTE5 4. Jan 2018 14:50

AW: Hilfe für Pacman-Projekt
 
Was ist genau deine Frage?

KleinTessy 4. Jan 2018 15:24

AW: Hilfe für Pacman-Projekt
 
... ich möchte dass eine nachricht erscheint wenn sich zwei icons auf dem selben platz befinden

LTE5 4. Jan 2018 15:27

AW: Hilfe für Pacman-Projekt
 
Ich stelle zwar auch gern ungenaue Fragen und viele hier im Forum verzweifeln daran.

Aber was du da fragst ist in etwa als ob ich sage "Ich möchte gerne in einem großen Haus wohnen".
Ohne Hintergrundinformationen wird man nicht weit kommen.

Luckie 4. Jan 2018 15:52

AW: Hilfe für Pacman-Projekt
 
Wie sieht denn dein bisheriger Code aus, der die Icons bewegt? Und hast dunschon eine Kollisionsabfrage?

Neutral General 4. Jan 2018 15:53

AW: Hilfe für Pacman-Projekt
 
So wie ich das lese geht es ihm gerade um die Kollisionsabfrage.

Du musst die Positionen und Größen der beiden Icons miteinander vergleichen und checken ob sie sich überlappen.
Da gibts erst mal (ohne Engine) nichts bequemes. Du musst selbst checken/ausrechnen ob sich die beiden Rechtecke überlappen.

Redeemer 6. Jan 2018 10:15

AW: Hilfe für Pacman-Projekt
 
Sind Icon1 und Icon2
Delphi-Quellcode:
TImage
s?

Irgendwie so?
Delphi-Quellcode:
function Collides(Obj1, Obj2: TControl): Boolean;
begin
  Result := ((Obj1.Top in [Obj2.Top .. Obj2.Top + Obj2.Height-1]) and
             (Obj1.Left in [Obj2.Left .. Obj2.Left + Obj2.Width-1])) or
            ((Obj2.Top in [Obj1.Top .. Obj1.Top + Obj1.Height-1]) and
             (Obj2.Left in [Obj1.Left .. Obj1.Left + Obj1.Width-1]));
end;

Bernhard Geyer 6. Jan 2018 12:10

AW: Hilfe für Pacman-Projekt
 
Wenn man TRects hat, kann man die Berechnung durch Windows durchführen lassen:

https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx

EWeiss 6. Jan 2018 13:30

AW: Hilfe für Pacman-Projekt
 
Zitat:

Zitat von Redeemer (Beitrag 1390390)
Sind Icon1 und Icon2
Delphi-Quellcode:
TImage
s?

Irgendwie so?
Delphi-Quellcode:
function Collides(Obj1, Obj2: TControl): Boolean;
begin
  Result := ((Obj1.Top in [Obj2.Top .. Obj2.Top + Obj2.Height-1]) and
             (Obj1.Left in [Obj2.Left .. Obj2.Left + Obj2.Width-1])) or
            ((Obj2.Top in [Obj1.Top .. Obj1.Top + Obj1.Height-1]) and
             (Obj2.Left in [Obj1.Left .. Obj1.Left + Obj1.Width-1]));
end;

Dir ist aber schon klar das ein Pacman rund ist oder
Fehlt da nicht was?

Sin, Cos, Tan, PI wären dann Voraussetzung da man hier nicht vom TRect ausgehen kann sondern vom Mittelpunkt jedes einzelnen Objects die Kollision berechnen muss.

gruss

LTE5 6. Jan 2018 13:37

AW: Hilfe für Pacman-Projekt
 
Die Pacman-Figuren "fahren" doch eh in Bahnen herum. Von daher ist es doch total egal, wie man es berechnet - also ob rund oder eckig.

EWeiss 6. Jan 2018 13:45

AW: Hilfe für Pacman-Projekt
 
Zitat:

Zitat von LTE5 (Beitrag 1390398)
Die Pacman-Figuren "fahren" doch eh in Bahnen herum. Von daher ist es doch total egal, wie man es berechnet - also ob rund oder eckig.

Nur dann wenn die Grafiken von der Größe dem Rechteck gleichkommen aber das kannst du nicht voraussetzen.
Normal ist es aber so das wenn sich zwei Runde Objekte treffen dann an ihren Endpunkten (Kreis) nicht am Quader.
Davon ab denke ich das es sich für den TE schon längst erübrigt hat.

gruss

LTE5 6. Jan 2018 13:49

AW: Hilfe für Pacman-Projekt
 
Sagen wir mal, das sollte bei einem so kleinen Projekt im Toleranzbereich liegen :P
bei einem Pacman des Jahres 2050 würde ich das verstehen, dass man Pixel für Pixel vergleicht. Aber nicht bei einem Pacman wie hier.

Redeemer 6. Jan 2018 14:27

AW: Hilfe für Pacman-Projekt
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von EWeiss (Beitrag 1390397)
Zitat:

Zitat von Redeemer (Beitrag 1390390)
Sind Icon1 und Icon2
Delphi-Quellcode:
TImage
s?

Irgendwie so?
Delphi-Quellcode:
function Collides(Obj1, Obj2: TControl): Boolean;
begin
  Result := ((Obj1.Top in [Obj2.Top .. Obj2.Top + Obj2.Height-1]) and
             (Obj1.Left in [Obj2.Left .. Obj2.Left + Obj2.Width-1])) or
            ((Obj2.Top in [Obj1.Top .. Obj1.Top + Obj1.Height-1]) and
             (Obj2.Left in [Obj1.Left .. Obj1.Left + Obj1.Width-1]));
end;

Dir ist aber schon klar das ein Pacman rund ist oder
Fehlt da nicht was?

Sin, Cos, Tan, PI wären dann Voraussetzung da man hier nicht vom TRect ausgehen kann sondern vom Mittelpunkt jedes einzelnen Objects die Kollision berechnen muss.

gruss

Wieso postest du sie dann nicht einfach? Insbesondere da die Geister eine andere aber bedeutende Kontur haben und der PacMan mit geöffnetem Mund ja auch nicht immer kollidiert (siehe Bild), reichen die von dir genannten Mittel nicht. Eigentlich müsste man es dann Pixel für Pixel machen, wobei dies auch noch vom Datentyp des Bildes abhängt, ob man auf Canvas zugreifen kann (TBitmap, TPNGImage) oder nicht (TIcon) und wie die Alphadaten gespeichert sind. Oder man erstellt sich eine Bitmap und zeichnet auf deren Canvas beide Icons und schaut, ob die Canvas einfarbig ist. Möchte man das? OP ist offensichtlich Anfänger und ist froh, den Quelltext von mir zu verstehen, was mit ein bisschen Mengenlehre drin sein könnte.

himitsu 6. Jan 2018 16:18

AW: Hilfe für Pacman-Projekt
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von EWeiss (Beitrag 1390397)
Dir ist aber schon klar das ein Pacman rund ist

Die bewegen sich auf festen rechtwinkligen Bahnen, da sind die Kollisionen meistens mittig, also egal ob Quadrat oder Kreis.
Anhang 48303
Der Quellcode des originalen Pacman ist inzwischen OpenSorce. Darfst gern nachsehn, die haben das damals nicht anders gemacht. :)

IN kann/sollte nicht für so große Werte verwendet werden.
Aber für TRect gibt es sowieso schon fertige Funktionen.
z.B. Delphi-Referenz durchsuchenIntersectRect Delphi-Referenz durchsuchenTRect.IntersectRect

LTE5 6. Jan 2018 16:28

AW: Hilfe für Pacman-Projekt
 
Zitat:

Die bewegen sich auf festen rechtwinkligen Bahnen, da sind die Kollisionen meistens mittig, also egal ob Quadrat oder Kreis.
Genau das meinte ich. Warum komplizierten Code mit Sin Cos und dem Quatsch schreiben wenn man es eh nicht braucht.


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