Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Kollision zweier Images? (https://www.delphipraxis.net/57707-kollision-zweier-images.html)

Angel4585 25. Nov 2005 13:00


Kollision zweier Images?
 
Hallo zusammen.

Ich hab im EDH diese Funktion, für die Kollision zweier Objekte gefunden:
Delphi-Quellcode:
function IsCollision (Rec1, Rec2 : Trect): Boolean;
begin
  Result := (Rec1.Right > Rec2.Left) and
            (Rec2.Right > Rec1.Left) and
            (Rec1.Bottom > Rec2.Top ) and
            (Rec2.Bottom > Rec1.Top );
end;
Es funktioniert auch perfekt soweit.

Meine Frage:

Angenommen ich habe zwei Timer, die jeder für sich eine Image Komponente bewegen.

Jetzt möchte ich aber nicht die Funktion oben verwenden und abfragen ob die zwei Images miteinander kollidieren, sondern ich möchte wissen, ob Image1 an der Position an der es gerade ist mit irgendetwas kollidiert. Weis jemand wie ich das hinbekommen könnte?

Danke schonmal

Angel4585

Khabarakh 25. Nov 2005 13:10

Re: Kollision zweier Images?
 
Zitat:

Zitat von Angel4585
Jetzt möchte ich aber nicht die Funktion oben verwenden und abfragen ob die zwei Images miteinander kollidieren, sondern ich möchte wissen, ob Image1 an der Position an der es gerade ist mit irgendetwas kollidiert.

Definiere bitte "irgendetwas". Ein anderes Control? Ein Image mit Alphakanal? Eine Fliege auf deinem Bildschirm :stupid: ?

Angel4585 25. Nov 2005 13:13

Re: Kollision zweier Images?
 
ein anderes Image, Also wenn ich zum Bleistift 100 Images habe und wissen will ob das bestimmt mit einem der anderen kollidiert.

Also ich muss ermitteln ob sich in dem Bereich von dem Image noch ein zweites befindet.

Aenogym 25. Nov 2005 13:23

Re: Kollision zweier Images?
 
hmhmhm....

wäre machbar in einer schleife. aber das würde eventuell die performance niederzwingen^^
wieso willst du das denn überprüfen? falls du ein spiel o.ä. programmierst, würde ich dir dinge wie DirectX oder OpenGL ans herz legen ;)

aenogym

Angel4585 25. Nov 2005 13:26

Re: Kollision zweier Images?
 
Ich hatte in Kunst ne vier, Grafik ist nicht gerade mein stärkstes Gebiet. :oops:

Aber um auf OpenGL zurück zu kommen. Angenommen ich habe zwei Threads mit X/Y Werten, kann ich dann direkt aus dem Thread ein Objekt auf ne Paintbox oder so anzeigen lassen, ohne das es da Konflikte gibt?

Und gibt es vielleicht sogar eine Art OpenGL Klasse, die ich z.B. mit

ogl.kugel(durchmesser,position);

ansprechen kann?

Khabarakh 25. Nov 2005 13:27

Re: Kollision zweier Images?
 
Ich denke, dass die Zeit der Schleife nicht ins Gewicht fällt. Wenn du dann noch Rechteck B nicht mehr mit A vergleichst, wenn A schon mit B verglichen wurde, ist die Routine noch einmal doppelt so schnell.
Allerdings ist der Ansatz mit vielen sich bewegenden TImages nicht wirklich das Wahre, auch wenn du nicht mit einer der beiden großen Engines arbeiten willst.
Zitat:

Zitat von Khabarakh (zu faul zum sich Wiederholen)
Du benutzt die Komponente TImage zum Anzeigen - diese ist aber einfach nicht zum Verschieben gedacht und entwickelt. Die Lösung ist, die Unterobjekte auf eine gemeinsame, in der Größe feste Canvas zu bringen, z.B. die der Form. Die Unterobjekte (bzw. ihr Bitmap) speicherst du in der Klasse TBitmap (der Name legt es schon nahe). Im OnPaint der Form kopierst du nun jedes Bitmap per TCanvas.Draw auf deren Canvas. Zusammen mit DoubleBuffered sollte es kein Flimmern mehr geben, Bitmapteile außerhalb der Form-Canvas werden einfach abgeschnitten.

=> Hier im Forum suchenOffScreenBitmap

[edit]
Da ist noch ein Post dazwischengrückt ^^ .


Zitat:

Zitat von Angel4585
Ich hatte in Kunst ne vier, Grafik ist nicht gerade mein stärkstes Gebiet. :oops:

Was hat das mit dem Thema zu tun :gruebel: ? Für die Grafikprogrammierung benötigst du nur Mathematik, die Sprites lädst du dir irgendwo aus dem Internet :wink: .

Zitat:

Aber um auf OpenGL zurück zu kommen. Angenommen ich habe zwei Threads mit X/Y Werten, kann ich dann direkt aus dem Thread ein Objekt auf ne Paintbox oder so anzeigen lassen, ohne das es da Konflikte gibt?
Wofür willst du Threads benutzen? Bislang benutzen nicht einmal die "richtigen" Spiele mehrere Threads.

Zitat:

Und gibt es vielleicht sogar eine Art OpenGL Klasse, die ich z.B. mit

ogl.kugel(durchmesser,position);

ansprechen kann?
Da könntest du dir mal GLScene anschauen.

[/edit]

Angel4585 28. Nov 2005 07:14

Re: Kollision zweier Images?
 
Also:

GLscene bringt bei mir irgendwelche Fehler, das irgenweine Datei nicht vorhanden ist, obwohl ich Such- und Bib.pfad eingestellt hab.

Ich habs für die Kugeln jetzt mit der Schleife gelöst, für die Panzer werd ich das dann denk ich auch machen.

Darstellung erfolgt mit Bitmaps aus zwei Imagelisten, eine mit 8x8 Pixel bmp's für Kugeln und eine mit 20x20 Pixel bmp's für Panzer, funz au super, allerdings habe ich bei den Panzern das Problem das sie sich drehen können sollten. Und eine Funktion dafür hab ich noch nirgends gefunden(Will keine extra Kompo).

Mal schauen was die Zukunft noch so bringt.

godman 28. Nov 2005 09:04

Re: Kollision zweier Images?
 
Falls du ein 2D Spiel programmierst rate ich dir die Komponenten von Turbosprite ....


Turbosprite


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:33 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz