![]() |
DelphiX: Kollision bei 2 Sprites.
Hi
hätte auch mal ne frage zu ner Kollisions abfrage bei 2 Sprites, weil ich nicht das richtige für mich beim suchen im Forum gefunden habe: Also ich habe ne Spielfigur (Sprite) und nen Stein. ich möchte jetzt das die Figur nicht durch den Stein laufen kann. Es soll keine Pixelgenaue Abfrage sein, sondern nur als Quadrat. Meine Move anweisung ist folgende:
Delphi-Quellcode:
procedure TAnimation.DoMove(MoveCount: Integer);
begin inherited DoMove(MoveCount); if isUp in Form1.DXInput1.States then begin y := y - speed; AnimCount := 3; AnimLooped := True; AnimSpeed := 100/1000; AnimStart := 6; end else if isDown in Form1.DXInput1.States then begin y := y + speed; AnimCount := 3; AnimLooped := True; AnimSpeed := 100/1000; AnimStart := 9; end else if isLeft in Form1.DXInput1.States then begin x := x - speed; AnimCount := 3; AnimLooped := True; AnimSpeed := 100/1000; AnimStart := 0; end else if isRight in Form1.DXInput1.States then begin x := x + speed; AnimCount := 3; AnimLooped := True; AnimSpeed := 100/1000; AnimStart := 3; end else begin AnimSpeed := 0; end; Collision; end; und die Collisions abfrage lautet wie folgt:
Delphi-Quellcode:
procedure TAnimation.DoCollision(Sprite: TSprite; var Done: Boolean);
begin if sprite is TGegenstand then begin beep; dead; end; end; Wie ihr seht, habe ich noch nichts richtiges gefunden. Ich hatte es mal mit dem hier probiert:
Delphi-Quellcode:
procedure TAnimation.DoCollision(Sprite: TSprite; var Done: Boolean);
begin if sprite is TGegenstand then begin beep; speed := 0; end else begin speed := 2; end; end; Dann hällt er zwar an, aber ich kann nichtmehr weglaufen. Wie mache ich das denn nun, das er nicht durchlaufen kann??? Danke im Vorraus!!! :freak: |
Re: DelphiX: Kollision bei 2 Sprites.
Und noch eine Frage:
neue Frage, neuer Thread. [edit=Luckie]Mfg, Luckie[/edit] |
Re: DelphiX: Kollision bei 2 Sprites.
Salut,
ich kann Dir zwar keine spezielle Delphi-Antwort auf Deine Frage geben, weil ich spowas bisher immer nur mit C++ und OpenGL gemacht habe, mein Tip wäre, wenn Du ne Kollision hast, dann setz Deine Figur doch einfach eine X-Koordinate zurück, damit Du nicht mehr in der Box Deines Steins bist. So wie das nämlich aussieht, und sich auch anhört, hast Du das Problem, daß Du zwar dann anhälst, aber immer noch in der Bounding-Box Deines Steins stehst, und deswegen immer wieder ne Kollision findest. Gruß Blechwolf |
Re: DelphiX: Kollision bei 2 Sprites.
Hi, ich habe das jetzt so gemacht, ich habe jeder Richtung nen Integer zugeteilt "Direction". wenn ich nach oben gehen wird er auf 0 gesetzt, nach rechts auf 1, nach unten auf 2 und nach links auf 3.
dann habe ich das zu meiner kollision geschrieben:
Delphi-Quellcode:
procedure TAnimation.DoCollision(Sprite: TSprite; var Done: Boolean);
begin if sprite is TGegenstand and (Direction = 0) or (Direction = 1) or (Direction = 2) or (Direction = 3) then begin beep; speed := -2; end else begin speed := 2; end; end; EDIT!!! Also ich merke gerade das diese version nicht sinnvoll ist. Wenn ich das Bild berühre, werde ich zwar zb nach hinten gesetzt, aber die Steuerung bleibt danach invertiert, obwohl ich das object garnichtmehr berühre. Und so toll ist diese Variante nicht, mit dem einfach nach hinten setzen. Gibts nicht ne einfachere version wo man einfach nur sagt das dieser block nicht passable ist?? Cu :freak: |
Re: DelphiX: Kollision bei 2 Sprites.
Hmmm, das war jetzt nicht so direkt die Lösung an die ich gedacht habe.
Meine Variante sah vor, daß Du direkt in die Koordinaten eingreifst (so wie in Deiner Move Anweisung) und das Speed einfach auf 0 setzt. In Pseudocode sollte das dann ungefähr so aussehen: If (Collision) then begin beep; speed := 0; x := x-1; /* alternativ y := y-1; x := x+1; y := y+1; oder beides, abhängig von der Kollision */ end else begin end; Gruß Blechwolf |
Re: DelphiX: Kollision bei 2 Sprites.
Ahh vielen dank, hat funktioniert ! ^^
:bouncing4: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:32 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-2025 by Thomas Breitkreuz