Delphi-PRAXiS
Seite 2 von 2     12   

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)

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:18 Uhr.
Seite 2 von 2     12   

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