Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Interagieren mit Objekten (Spiel) (https://www.delphipraxis.net/102959-interagieren-mit-objekten-spiel.html)

rawsoul 7. Nov 2007 15:02


Interagieren mit Objekten (Spiel)
 
Hallo liebe Delphianer,

Ich möchte mich an einem kleinen Jump and Run Spiel versuchen.
Da die Spielfigur mit Objekten interagieren soll (Shapes in meinem Fall -> Ich nutze keine DX oder OGL, alles läuft über Delphikomponenten), muss ich herausfinden, ob die Spielfigur dieses Objekt (Es gibt verschiedene Arten) berührt, welche dann dementsprechend agiert.

Die Kollision verläuft zur Zeit bei durch Pythagoras (sqrt(deltax^2+deltay^2). Jetzt möchte ich aber einen Schritt weitergehen und undefinierte, unsymmetrische Polygone als Kollisionsobjekt nutzen. Dazu sind schon einige Versuche schiefgelaufen (Polygon in Dreiecke einteilen). Welchen Tipp/Ansatz könntet ihr mir geben?

Desweiteren möchte ich herausfinden, auf welcher Seite der Spielfigur sich das Kollisionsobjekt befindet. Bei der Pythagorasmethode ging es ja noch relativ einfach. Aber bei den Polygonen habe ich nicht einmal einen Ansatz :(

Grüße,
Frank.

Apollonius 7. Nov 2007 15:14

Re: Interagieren mit Objekten (Spiel)
 
Du könntest Windows für dich arbeiten lassen und Regions verwenden. Dafür musst du du dann CreatePolygonRgn benutzen, um die Regions zu erstellen, und CombineRgn zum Test, ob sie sich schneiden. Die Regions kannst du dann auch gleich zum Zeichnen verwenden.

rawsoul 7. Nov 2007 15:15

Re: Interagieren mit Objekten (Spiel)
 
Wow, das klingt ja gut!
Ich werde es testen (und Ergebnisse einstellen, falls erwünscht), vielen Dank!

//Edit:
Irgendwas mache ich wohl falsch ;)
Habs mal in nem Timer probiert:
Delphi-Quellcode:
var
  Form1: TForm1;
  points1:array [0..4] of tpoint;
  poly:hrgn;
  dc:hdc;
  hbr:hbrush;

[...]

procedure TForm1.Timer1Timer(Sender: TObject);
var
  i:integer;
begin
  dc:=GetDC(Handle);
  for i:=0 to 4 do
    begin
      points1[i]:=point(random(form1.clientWidth),random(form1.clientHeight));
    end;
  poly:=CreatePolygonRgn(points1,5,2);
  fillrgn(dc,poly,hbrush(rgb(255,0,0)));
end;
Ich seh leider nichts auf dem Form. Wo mache ich da den Fehler?

//Edit2:
Zu früh aufgegeben... Jetzt hab ichs, danke euch :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:28 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