[Gelöst]Bei berührung von 2 Shapes ein Fehler bringen.



  • Ich brauch mal dringend eure Hilfe,
    Hab ein kleines Spiel Programmiert wo man über eine Straße laufen muss und nicht von den Autos angefahren werden darf.
    Doch jetzt komm ich nicht weiter, wie ich mach das das wenn sich der Mensch und ein Auto sich berühren eine Aktion passiert? Bei den Autos und dem Menschen handelt es sich um shapes.
    Danke schonmal



  • Für rechteckige Objekte helfen z.B. IntersectRect und IsRectEmpty. Für alles Andere ist selbst implementieren angesagt.
    Als Neuling solltest du wohl bei der ersten Variante bleiben.



  • Hm kannst da bitte noch ein bisschen helfen, find nicht viel dazu, habs mit

    if (!IsRectEmpty(Shape1)) Panel1->Caption="abc";
    

    Probiert aber das was ja mal voll daneben.



  • IsRectEmpty ist ein Win API-Funktion. Der kannst du kein Shape übergeben. Diese Funktion verlangt als Parameter ein RECT*.
    Hier hats du mal eine Liste der passenden API-Funktionen. Schau dir mal die entsprechenden Erklärungen dazu an.
    http://msdn.microsoft.com/en-us/library/ms536124.aspx
    PS:
    "ist voll daneben" ist keine vernünftige Fehlerbeschreibung. Gewöhn dir bitte an die Fehlermeldungen korrekt wiederzugeben.



  • Kollisionsabfrage von 2 Rechtecken oder noch einfacher Quadraten(?) sollte sich doch über "simple" Geometrie viel einfacher realisieren lassen oder?

    Also ich hab es vor Ewigkeiten mal in Canvas gemacht... in 2 Dimensionen ist das ja noch verhaltensmäßig einfach.



  • Braunstein schrieb:

    PS:
    "ist voll daneben" ist keine vernünftige Fehlerbeschreibung. Gewöhn dir bitte an die Fehlermeldungen korrekt wiederzugeben.

    Das sollte auch keine Fehlerbeschreibung sein sondern sollte einfach nur wiedergeben das ich keine ahnung habe 😉

    Auf der MSDN seite war ich schon und auch das es eine WinApi funktion ist hab ich aus der Fehlermeldung sehen können. Da ich aber noch nichts über BOOL weiß und auch nichts über LPRECT finden konnte habe ich es jetzt anderst lösen könnenn. Ja ich weiß, ist nicht schön und auch aufwendig und umständlich aber ich bin als Anfänger damit zufrieden und werd es auch erstmal damit belassen. Wie Slashi schon sagte, kann man es mit Geometrie realisieren und hier mein Ergebnis:

    int dp,ap,...
    //Position des Spielers
    dp=car1->Left;
    ap=car1->Top+20;
    bp=car1->Left+20;
    cp=car1->Top;
    //Position des 1. Autos...
    d1=car1->Left;
    a1=car1->Top+45;
    b1=car1->Left+100;
    c1=car1->Top;
    
    if ((a1>=cp&&b1>=dp&&c1<=ap&&d1<=bp)... {
    //meine kollisionsausgabe
    }
    

    Vielen Dank für eure Hilfe, werde mir aufjedenfall die RECT Funktionen nochmal genauer anschauen und mein Programm vllt dann nochmal neu schreiben.


Log in to reply