![]() |
2 Sprites übereinander... und wieder Collision
Moin,
ich habe ein echt nervendes Problem! Ich habe zwei Sprites übereinander und möchte gerne, das mein fiktiver Mousezeiger (in der DoCollision Procedure) den oberen erkennt. Aber es wird der untere erkannt. Kann man das ändern? Hier nochmal ein paar Bilder... ![]() ![]() ![]() Also, oben Links ist eine Anzeige "AktColl". die sagt, womit die Mouse gerade kollidiert. 99 steht für einen Teil der Karte, 60 für eine Unit und 70 für ein Gebäude. 50 wäre ein Button. Das OK - Teil ist ein Button (TButton, wie auch "Units", "Edifices" und so weiter), aber er sagt mir trotzdem das ich mit der Map kolliediere... jemand ne Idee, die mich rettet? PS: PixelCheck ist an... Danke und sorry, das ich schon wieder das Thema Kollision aufgreife :roll: Ricane |
Re: 2 Sprites übereinander... und wieder Collision
Hi Ricane. Hänge bitte die Bilder als Attachements an, es gibt hier genug User mit Modem :zwinker:
...:cat:... |
Re: 2 Sprites übereinander... und wieder Collision
Zitat:
|
Re: 2 Sprites übereinander... und wieder Collision
Ist das überprüfen der collision in OnMouseMove drinn?
Wenn ja, dann mach folgendes:
Delphi-Quellcode:
Speichere keine Sachen ab, wie, wenn er eine Zahl bekommt, dass er keine anderen collisionen mehr zulässt. Er soll einfach alle Durchführen. Nun ist die Reihenfolge entscheident. Was ganz hinten ist muss am Anfang hin. Wenn nämlich was im Vordergrund ist, dann muss das erst später überprüft werden.
procedure TForm1.DXDraw1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer); begin if Maus=Feld then 99 //collision mit Feld if Maus=Button then 50 //collision mit Button end; |
Re: 2 Sprites übereinander... und wieder Collision
Ne,
habe das in der DoCollision Procedure von dem Mauszeiger... sonst ist es ja auch mega umständlich! Dort hat man ja gleich einen Sprite zum vergleichen, aber der ist halt gerne mal der unterste und nicht oberste... Jemand noch eine andere Idee?! Beste Grüsse, Ricane |
Re: 2 Sprites übereinander... und wieder Collision
Kann mir das bei dir irgendwie nicht so richtig vorstellen. Der Quellcode würde mir schon sehr weiterhelfen, wenn er nicht zu lang ist. Dann könnte ich dir vielleicht eine Antwort samt funktionierendem Quellcode geben :wink:
thnx, isas! |
Re: 2 Sprites übereinander... und wieder Collision
Also...... hier die Kollisionsabfrage:
Delphi-Quellcode:
Und hier wird das dann ausgewertet!
Procedure TMouseZ.DoCollision(Sprite: TSprite; Var Done: Boolean);
Begin (* Kollisionsliste! 50 = Schilder 60 = Eine Unit wurde geklickt! (Ein Thumb im Bau Menü) 70 = Ein Gebäude wurde geklickt (Ein Thumb im Bau Menü) 80 = Ein Special wurde geklickt (Ein Thumb im Bau Menü) 99 = Ein Stück der Map! *) If (Sprite Is TMap) Then AktColl := 99; (* If (Sprite Is TButtons) And (Edifices.Visible = True) Then AktColl := 50; *) If (Sprite Is TButtons) Then AktColl := 50; If (Sprite Is TThumbUnits) And (ThSold.Visible = True) Then AktColl := 60; If (Sprite Is TThumbGeb) And (ThIonCanon.Visible = True) Then AktColl := 70; If (Sprite Is TThumbSpecials) And (ThBiohazard.Visible = True) Then AktColl := 80; AktSprite := Sprite End;
Delphi-Quellcode:
Hab die Code Teile aus der Case Anweisung mal rausgenommen......
Procedure TfrmMain.DXDrawMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); Var (* 1) Laufvariable 2) Der alte und der neue Name für das Bild, was geladen wird! *) I: Integer; Alter, Neuer: String; Begin (* 1) Wenn der aktuelle SPrite leer ist, dann raus! 2) 50 bedeutet ist ist eines der Option - Schilder 3) Erstmal alle Schilder wieder auf standard! 4) Dann wird geprüf, ob der aktzelle ein 'Cho' (Choosen) vor dem namen stehen hat. Wenn ja, kommt es weg, sonstr davor! 5) Das neue Bild wird zugewiesen! *) If AktSprite = Nil Then Exit; Case AktColl Of 50: Begin End; 60: Begin End; 70: Begin End; 80: Begin End; 99: Begin End; End; End; End; |
Re: 2 Sprites übereinander... und wieder Collision
Ich sehe eigentlich keinen Fehler bei dir. Mit dem einzigen, mit dem ICH nicht klar komm ist folgendes:
Delphi-Quellcode:
und
AktSprite := Sprite
Delphi-Quellcode:
Brauchst du das eigentlich!? Klammer das mal aus. Sonst gibs da bei dem Quellcode, den du gepostet hast keinen Fehler. Also muss es dann irgendwo anders liegen
If AktSprite = Nil Then Exit;
|
Re: 2 Sprites übereinander... und wieder Collision
Zitat:
Schade, hab keine Ahnung wo der Fehler sein soll.... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:11 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