AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Bricks Kollision

Ein Thema von Diamondback2007 · begonnen am 3. Feb 2007 · letzter Beitrag vom 3. Feb 2007
 
Benutzerbild von Diamondback2007
Diamondback2007

Registriert seit: 2. Feb 2007
260 Beiträge
 
Delphi 2007 Professional
 
#1

Bricks Kollision

  Alt 3. Feb 2007, 15:04
Hi!

hab mal ne frage zu nem spiel das ich grade schreibe... es handelt sich um die Kollisionsabfrage zwischen einem ball und kleinen rechtecken.(wers nich kennt, das spiel hat das ziel alle rechtecke abzuschießen um ins nächste level zu kommen) wenn ich aber jetz für jedes rechteck einzeln überprüfe ob das object "ball"(ein quadrat) über meinem rechteck ist, passiert es das der ball zu schnell ist, d. h. das er durch das rechteck durchfliegt bevor das spiel merkt das der ball eig kollidiert. kann ich die kollision irgendwie anders lösen?
hier ein code-Schnipsel:
Delphi-Quellcode:
 //Kollision mit Bricks
  for j := 1 to NumBricks do
  begin
    If Brick_Kollision[j] = true
    Then
    begin
      //linke Seite
      If (Ball.Position.X+Ball.Size.X/2+6>=Brick[j].Obj.Position.X-Brick[j].Obj.Size.X/2) and (Ball.Position.X+Ball.Size.X/2+6<=Brick[j].Obj.Position.X-Brick[j].Obj.Size.X/2)
      Then
        If (Ball.Position.Y-Ball.Size.Y/2 <= Brick[j].Obj.Position.Y-Brick[j].Obj.Size.Y/2+2) and (Ball.Position.Y+Ball.Size.Y/2 >=Brick[j].Obj.Position.Y+Brick[j].Obj.Size.Y/2-2)
        Then
        begin
          DirX_b := -DirX_b;
          Brick_Kollision[j] := false;
          Brick[j].Obj.Visible := false;
        end;

      //rechte Seite
      If (Ball.Position.X-Ball.Size.X/2-6<=Brick[j].Obj.Position.X+Brick[j].Obj.Size.X/2) and (Ball.Position.X-Ball.Size.X/2-6>=Brick[j].Obj.Position.X+Brick[j].Obj.Size.X/2)
      Then
        If (Ball.Position.Y-Ball.Size.Y/2 <= Brick[j].Obj.Position.Y-Brick[j].Obj.Size.Y/2+2) and (Ball.Position.Y+Ball.Size.Y/2 >=Brick[j].Obj.Position.Y+Brick[j].Obj.Size.Y/2-2)
        Then
        begin
          DirX_b := -DirX_b;
          Brick_Kollision[j] := false;
          Brick[j].Obj.Visible := false;
        end;

      //Seite oben
      If (Ball.Position.Y+Ball.Size.Y/2+6>=Brick[j].Obj.Position.Y-Brick[j].Obj.Size.Y/2) and (Ball.Position.Y+Ball.Size.Y/2-6<=Brick[j].Obj.Position.Y-Brick[j].Obj.Size.Y/2)
      Then
        If (Ball.Position.X+Ball.Size.X/2 >= Brick[j].Obj.Position.X-Brick[j].Obj.Size.X/2) and (Ball.Position.X-Ball.Size.X/2 <Brick[j].Obj.Position.X+Brick[j].Obj.Size.X/2)
        Then
        begin
          DirY_b := -DirY_b;
          Brick_Kollision[j] := false;
          Brick[j].Obj.Visible := false;
        end;

      //Seite unten
      If (Ball.Position.Y-Ball.Size.Y/2-6<=Brick[j].Obj.Position.Y+Brick[j].Obj.Size.Y/2) and (Ball.Position.Y-Ball.Size.Y/2-6>=Brick[j].Obj.Position.Y+Brick[j].Obj.Size.Y/2)
      Then
        If (Ball.Position.X+Ball.Size.X/2 > Brick[j].Obj.Position.X-Brick[j].Obj.Size.X/2) and (Ball.Position.X-Ball.Size.X/2 <Brick[j].Obj.Position.X+Brick[j].Obj.Size.X/2)
        Then
        begin
          DirY_b := -DirY_b;
          Brick_Kollision[j] := false;
          Brick[j].Obj.Visible := false;
        end;
    end;
kann sein das ich hier un da ein paar zahlen vertauscht hab, hab nämlich schon ziemlich viel rumprobiert...
vielen dank schonmal!

Fabi
Fabian E.
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:10 Uhr.
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 by Thomas Breitkreuz