Überlappung überprüfen (zwei "Fahrzeuge")

  • C#
  • .NET (FX) 4.5–4.8

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Annoxoli.

    Überlappung überprüfen (zwei "Fahrzeuge")

    Hi,

    aktuell stehe ich vor folgendem Problem:
    Es soll eine simple Straße, mit einer Ampel und Fahrzeugen erstellt werden.
    Soweit so gut, es funktioniert.

    Die Fahrzeuge können unterschiedliche geschwindigkeiten haben!

    Aktuell, überprüfe ich wie folgt, ob ein Fahrzeug vor einer Ampel stehen bleiben muss:

    C#-Quellcode

    1. //übergeben wurde das Objekt "Auto"
    2. // und eine Liste von allen Autos
    3. foreach (var item in Ampel)
    4. {
    5. for (int i = 10; i < 20; i++)
    6. {
    7. if ((item.AmpelLocationX + i) == Auto.AutoLocationX)
    8. ## todo;
    9. }
    10. }


    Das gleiche verfahren habe ich bei den Fahrzeugen umgesetzt.
    Nun wurde mir vorhin gesagt, dass es zwar eine Lösung sei, aber nicht elegant, dass dachte ich mir bereits.

    Nun hatte ich vor, die überlappung zu berechnen. Jedes Fahrzeug soll nach vorne und hinten hin fünf Pixel platz haben.
    sollte der Platz nicht gegeben sein, muss das Fahrzeug, bzw das Fahrzeug dahinter anhalten.

    Mein gedankenansatz :

    C#-Quellcode

    1. foreach (var item in Auto)
    2. {
    3. if (item.AutoID != Auto.AutoID)
    4. {
    5. if ((Auto.AutoLocationX + Auto.AutoWidth) == (item.AutoLocationX + item.AutoWidth))
    6. ## kolidiert
    7. }
    8. }


    Da die Geschwindigkeit IMMER unterschiedlich ist, kann ich nicht so einfach den "Freiraum" hinzuberechnen.
    Wie genau kann ich dieses Umsetzen ?

    mir wurde der gesagt das ich ggf. mit "min/max" arbeiten kann, da fühle ich mich jedoch auf dem Holzweg.

    Für Tipps bin ich sehr dankbar!

    Gruß

    //Edit:
    Merke gerade, das es nicht ganz in die Spieleprogrammierung passt.
    Die Umsetzung erfolgt jedoch mit GDI, demzufolge sind die Eigenschaften der Objekte ^^

    Annoxoli schrieb:

    C#-Quellcode

    1. for (int i = 10; i < 20; i++)
    2. {
    3. if ((item.AmpelLocationX + i) == Auto.AutoLocationX)
    4. //## todo;
    5. }
    Das geht doch wesentlich eleganter:

    C#-Quellcode

    1. if ((Auto.AutoLocationX - item.AmpelLocationX) >= 10) && (Auto.AutoLocationX - item.AmpelLocationX) < 20))
    2. {
    3. //## todo;
    4. }
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!