![]() |
Autos sollen auf der Kreuzung Unfall bauen
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo DP,
Ich habe ein kleines einfaches Kreuzungssimulation programmiert, in der so 20 Autos (images) ihre Runden drehen. Nun würd ich gern, dass diese auf Knopfdruck einen Unfall bauen. Also soll zb ein Auto schneller werden und dadurch ein anderes kreuzen. Eigentlich gar kein Problem. Zum Problem : Mein Problem ist das Überprüfen, ob die Autos (Images) sich kreuzen. Ich weiß man könnte es einfach mit: if image1.left>image2.left and image1<image2.left+20 then ... Aber das wäre mir bei 20 Autos viel zu umständlich, jedem Auto 19 solcher Befehle zu liefern. :-D Deshalb meine Frage an euch gibt es eine Möglichkeit das eleganter und besonders kürzer hinzubekommen. Ich weiß, dass meine Infos immer ein bisschen knapp sind, deshalb bei Fragen einfach nachfragen.:) Hier nochmal mein Programm, falls den sich jemand ansehen möchte (bitte nicht lachen, habe info erst seit 3 Wochen) : |
AW: Autos sollen auf der Kreuzung Unfall bauen
|
AW: Autos sollen auf der Kreuzung Unfall bauen
Hi,
Also danke erstma für deine Antwort. Zu deiner Antwort: Das sieht ganz schön professionell aus. Ich habe leider erst seid 3 Wochen Informatik, deshalb ist das ganz schön schwer zu verstehen. Also, ich bin mir sicher, dass es mir weiter helfen würde, aber leider verstehe ich es nicht, da wir nur sowas wie bilder bewegen, timer einstellen, if- abfragen und sowas gemacht haben. :( Gibts da vielleicht was einfacheres? Wenn nicht muss ich mich ma ein bisschen damit beschäftigen ( also was du mir gepostet has) |
AW: Autos sollen auf der Kreuzung Unfall bauen
Zitat:
Du kannst dir doch eine Funktion erstellen, der immer 2 Images übergeben werden und die dann prüft, ob sich die Bilder berühren oder gar überdecken:
Delphi-Quellcode:
Diese Logik kann ganz schön knifflig sein, aber wenn du's einmal hast,
// liefert True zurück, wenn sich die Images (auch teilweise) überdecken
function ImageKollision(a, b : TImage):Boolean; begin ... end; dann ist das Erkennen eines "Unfalls" ein Kinderspiel. Aber du kannst es dir noch einfacher machen: In Windows gibt es schon eine Funktion ![]() |
AW: Autos sollen auf der Kreuzung Unfall bauen
Wenn Du bei Deinem Ansatz bleiben willst, kannst Du damit vielleicht was anfangen,
das Memo1 als Liste und die Auflösung über Namen habe ich nur zum Demonstrieren verwendet, nimm lieber eine TList of Record dafür oder ähnliches ....
Delphi-Quellcode:
var
i,j:Integer; r:Trect; n1,n2:String; begin r.Left := 0; r.Top := 0; Memo1.Lines.Clear; for I := 0 to Componentcount -1 do if (Components[i] is TImage) and TImage(Components[i]).Visible then begin for j := 0 to Componentcount -1 do if (Components[j] is TImage) and TImage(Components[j]).Visible and (Components[j]<>Components[i]) then begin INtersectRect(r,TImage(Components[i]).BoundsRect,TImage(Components[j]).BoundsRect); if r.Left>0 then begin n1 := Components[i].Name + '_' + Components[j].Name; n2 := Components[j].Name + '_' + Components[i].Name; if (Memo1.Lines.IndexOf(n1)=-1) and (Memo1.Lines.IndexOf(n2)=-1)then Memo1.Lines.Add(n1); end; end; end; end; |
AW: Autos sollen auf der Kreuzung Unfall bauen
Hi,
Also das sieht schon wesentlich einfacher aus. Auch wenn das das erste ma wird das ich nun funktionen erstelle, aber ich werde es ausprobieren.:) Ich bedanke mich nochmal für die ganzen Antworten.:thumb: Gruß Blackstyle94 |
AW: Autos sollen auf der Kreuzung Unfall bauen
@Bummi
wo finde ich dieses Tlist of records? Ich habs in der Tool palette gesucht aba nicht gefunden.:( |
AW: Autos sollen auf der Kreuzung Unfall bauen
Zitat:
Wenn du wiesen willst, wo man die finden kann dann schau doch in die Online-Hilfe (F1) oder auch hier über die Referenz ![]() |
AW: Autos sollen auf der Kreuzung Unfall bauen
So habs nun hin bekommen.
Danke nochmal an alle Antworten. Gruß Blackstyle94 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:21 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