Entwickler-Ecke

Multimedia / Grafik - Kollisionsabfrage bei Shapes


Delete - Do 06.10.05 15:49
Titel: Kollisionsabfrage bei Shapes
Hallihallo!

Ich bastel grad an einem kleinen Spiel und würde da gerne eine Kollisionsabfrage zwischen zwei sich bewegenden shapes einbauen.
*Wie ist dies am leichtesten zu realisieren?*
(ohne DelphiX oder sonstwas spezielles. Only Delphi) :)

mmmichael


Phobeus - Do 06.10.05 17:33

Eine genauere Definition des Begriffes Shape... eine Suchanfrage ans Forum, da zahlreiche Fragen in dieser Form sicherlich bereits beantwortet wurden. Sofern ein Shape bei Dir als Recteckt definiert wird, reicht wohl eine einfache IF-Abfrage. Befindet sich X1/Y1 bis X2/Y1, sowie X1/Y2 bis X2/Y2 in den Bereich des zweiten Bereichs, gab es eine Kollision.


Delete - Do 06.10.05 17:57

das will aber nicht so wirklich. gehts nicht anders?


Phobeus - Do 06.10.05 18:07

Man kann es auch in Stossgebeten gen Himmel probieren oder eine mathematische Weltkonferenz einberufen in der man gängige Logik in Frage stellt in der Hoffnung, dass künftige Programmiersprachen es anders umhersetzen... wer in Herr Gottes nahmen sagt den, dass Programmieren etwas mit einem Willen zu tun hat? Du suchst einen einfachen Weg, dies IST der einfachste weg. Geschrieben als Funktion, sogar sehr einfach zu benutzen. Selbst in komplexeren Situationen wie z.B. der 3D-Entwicklung sind sogenannt "Bounding Box" oder "Bounding Spheres" Grundmuster, die verwendet werden und dies meist gar nicht komplexer als eben der Weg, den Du suchst...


Delete - Do 06.10.05 18:21

Dann sag mir doch bitte warum die erste abfrage mit Spieler1 geht und die zweite nicht, obwohl sie haargenau das gleiche neinhaltet:


Delphi-Quelltext
1:
2:
3:
4:
  with Pongform do begin
 if ( (  Ball.Left                in [Spieler1.Left .. (Spieler1.Left + Spieler1.width)]) AND (Ball.top in [Spieler1.top .. (Spieler1.top + Spieler1.height)]) )then movx := - movx;
 if ( (  (Ball.Left + Ball.width) in [Spieler2.Left .. (Spieler2.Left + Spieler2.Width)]) AND (Ball.top in [Spieler2.top .. (Spieler2.top + Spieler2.height)]) )then movx := - movx;
  end;


BenBE - Do 06.10.05 21:30

^^ Der klassische Set-Fehler ^^ :P

Delphi unterstützt nur Sets mit maximal 256 Elementen. Delphi

Du musst wohl oder Übel Ranges mit (X >= Min) and (X <= Max) prüfen. Dann sollte das eigentlich funktionieren ...


digi_c - Fr 07.10.05 08:44

In der aktuellen Onlineausgabe von Der Spieleprogrammierer [http://www.magazin.spieleprogrammierer.de/] ist auch sehr gut die ganze Theorie erläutert, ist aber an C gehalten aber sehr interessant da für verschiedenste Formen.


Delete - Fr 07.10.05 15:11

Okay danke! Jetzt hauts hin! :D