Autor Beitrag
Herr Bananerama
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 130



BeitragVerfasst: Do 07.02.08 18:54 
Hi Delphi Freunde

Folgendes: Ich arbeite grade an einem Programm, welches ein Auto grafisch darstellt. Es ist mit Canvas gezeichnet, kann sich in alle Richtungen drehen ( also nicht nur immer um 90 Grad) und kann auch in die jeweilige Richtung fahren.

Nun möchte ich Hindernisse Einbauen. Wenn das Auto diese erreicht sollen verschiedene Dinge passieren. Z.b Auto hält an, es sammel das Hinderniss ein etc.. Doch leider weiß ich nicht wie man solche Hindernisse prüfen könnte ob sie vor dem Auto liegen!

Hat jemand vielleicht eine Ahnung Wie ich das machen könnte?
nagel
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 708

Win7, Ubuntu 10.10

BeitragVerfasst: Do 07.02.08 19:09 
Schau mal, ob dir dieser Thread weiterhilft.
Herr Bananerama Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 130



BeitragVerfasst: Do 07.02.08 20:02 
user profile iconnagel hat folgendes geschrieben:
Schau mal, ob dir dieser Thread weiterhilft.


Hmmm für mein programm wäre eigentlich nur möglich zu prüfen ob sich zwei Pixel überlappen. Allerdings verstehe ich nicht wie ich das machen könnte. Außerdem ist das Auto ist nicht Auf Eine Bitmap gezeichnet.
Herr Bananerama Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 130



BeitragVerfasst: Do 07.02.08 20:57 
Ich füg mal noch einen Screenshot hinzu damit ihr euch das besser vorstellen könnt wie es gemeint ist.
Einloggen, um Attachments anzusehen!
ub60
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 765
Erhaltene Danke: 130



BeitragVerfasst: Do 07.02.08 21:50 
Die pixelgenaue Kollisionsabfrage geht relativ einfach mit Hilfe zweier Masken, die Du dann mit logischen Operatoren verknüpfen musst. Im resultierenden Bitmap hast Du dann alles Pixel einer Farbe (weiß), dann keine Kollision oder wenigstens ein andersfarbiges Pixel, dann Kollision.
Eine gute Erklärung mit Source gibt es hier: www.swissdelphicente...showcode.php?id=1791

ub60
Herr Bananerama Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 130



BeitragVerfasst: Do 07.02.08 22:35 
user profile iconub60 hat folgendes geschrieben:
Die pixelgenaue Kollisionsabfrage geht relativ einfach mit Hilfe zweier Masken, die Du dann mit logischen Operatoren verknüpfen musst. Im resultierenden Bitmap hast Du dann alles Pixel einer Farbe (weiß), dann keine Kollision oder wenigstens ein andersfarbiges Pixel, dann Kollision.
Eine gute Erklärung mit Source gibt es hier: www.swissdelphicente...showcode.php?id=1791

ub60


Wird auf diese weise nur getestet ob die Ränder von zwei Rects sich überschneiden? Das Problem ist ... ich habe ja keine Rects ... Auf ein Image oder eine Bitmap könnte ich das Auto zwar verlagern, aber das Problem ist doch dann immernoch, dass wieder nur die Ränder der Images/Bitmaps auf Kolision überprüft werden und alles dadurch sehr ungenau wird. Es soll ja wirklich nur eine Kolision der Farbigen Flächen geprüft werden.

Kann natürlich auch sein das ich den Text der sich hinter dem Link versteckt falsch verstanden habe ;)

Danke schonmal für die fleißigen Antworten :D
Herr Bananerama Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 130



BeitragVerfasst: Fr 08.02.08 18:36 
Was haltet ihr davon wenn ich vielleicht das Auto in ein Image Packe, mit einer funktion abfrage ob sich Top, Left, Right oder Button mit dem Hinderniss überschneiden und wenn ja, ich dann nochmal Schaue ob sich Pixel von dem Auto (die nicht der Hintergrundfarbe vom Image in dem sich das Auto befindet entsprechen) mit dem Hinderniss überschneiden. Und wenn dass passiert hält das Auto an.

Aber weiterhin bin ich auf der Suche nach besseren Lösungen. Außerdem wie könnte man die Abfrage der Pixel realisieren. Und wäre das nicht zu Langsam?

Außerdem Flackert das Auto wenn ich das in ein Bitmap Packe ... kann man das verhindern?
DHE
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 37

Win XP, Ubuntu 9.04
Delphi 7 PE; Delphi 2010 Prof (Dank AGS 2009 ;-) )
BeitragVerfasst: Fr 08.02.08 19:30 
Um das Flackern zu unterbinden müste man nur die Eigenschaft DoubleBuffered des Formulars auf true setzen

ausblenden Delphi-Quelltext
1:
Form1.DoubleBuffered := true;