Kollisionskontrolle

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Kollisionskontrolle

    Hi Leute,
    ich hab da ein Problem mit meiner aktuellen App.
    Von rechts kommen Objekte reingeflogen und von oben kommen Objekte reingeflogen. Beide sind sehr schnell. Wenn sie kollidieren, dann soll das „schwächere“ Objekt zerstört werden.

    die Problematik war jetzt, dass er manchmal kollisionen gar nicht erkannt hat und manchmal sogar wenn eigentlich gar keine Kollision stattfand.

    Irgendwann habe ich die buildin Variante verwendet „bei Kollision mit“ (ist zu finden wo man step und create Und draw finden kann.

    jetzt merkt er zwar immer wenn eine Kollision stattfindet, denkt aber auch manchmal das eine Kollision stattfand obwohl es nicht so ist.

    also da sogar das collisionsevent Fehler bei der Auswertung macht bin ich langsam überfragt.

    alle Masken sind einfache Rechtecke.
    die roomgeschwindigkeit liegt bei 60fps

    vorher habe ich mit position_meeting und place_meeting gearbeitet.
    ich habe auch Vspeet s und hspeet uaddiert. Nichts funktioniert zufriedenstellend..

    lg gruen

    sorry für die vielen Fehler aber ich habe anzeigeschwierigkeiten auf dem Handy. Tippe blind :D


  • Du kannst mit collision_line zwichen xprevious,yprevious,x,y das ganze abchecken. Das reicht in den meisten Fällen. Die umfassendere Variante wäre dann, du loopst mit einem verschachtelten for (für x und y - Komponente) durch die Zwichenpositionen. Für Höchste Präzision müsstest du da in 1Pixel schritten gehen, aber das klappt eigentlich auch gut in größeren Schritten. Das heißt wenn du von x:2 y:4 auf x:3 y:8 bewegst, dann checkst du jede Position dazwichen mit place_meeting etc. also für y: 5,6 und 7 in diesem Fall. Der Vorteil ist auch das man ganz genau bestimmen kann womit das objekt zuerst kollidiert (wenn mehrere Objekte auf der bewegten Strecke sind) und sogar alle Kollisionspartner der Reihe nach in eine Liste etc. schreiben könnte.

    Das ist auch gerade für Projektile oder ähnliches nicht wegzudenken. Wenn du immernoch Probleme hast schreib mir mal dann kann ich dir ein paar codeschnipsel zukommen lassen.
    132 little bugs in the code. 132 little bugs. Fix a few, set the compiler to stew, 172 little bugs in the code... :vogel:
  • Hi, wie Rhazul schon gesagt hat, diese Methode der Zwischenprüfung wird auch bei Sonic verwendet,
    dessen Kollisionsabfrage den Hobby-Programmieren viele Haare gekostet hat ;)

    Hier noch ein paar gute Tutorials zu dem Thema:

    youtube.com/watch?v=j7HII9AsftY

    youtube.com/watch?v=V8IA1Ny2sqU

    youtube.com/watch?v=Qo5UfQ1o1SA

    youtube.com/watch?v=xUO8W4lMRAc

    Man könnte ja noch auf Physikalische Kollisionsmethoden setzen. Damit habe ich aber noch nicht
    gearbeitet in GM.

    Miradur

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Miradur ()

  • Hallo,
    Hab dazu eine (etwas freche und ev. doofe) Frage:
    Wäre es nicht besser, mit genauen Masken zu arbeiten?
    Damit wird doch die Kollision schon genauer erkannt. Oder reicht das nicht mehr aus...

    Genaue Masken reduzieren die Perfomance je nach Menge der Objekte deutlich.
    Genaue Masken solltest du nur Verwenden wenn für den spielbetrieb unbedingt nötig.
    Und selbst dann wäre vllt noch zu überlegen ob eine runde Maske ausreichen würde oder ob es wirklich die Form des Sprites haben muss.
    alles in allem sind rechteckige Masken die vom Computer am schnellsten und am leichtesten zu berechnenden

    in meinem Fall bestand das Problem jetzt darin, dass durch die geschwindigkeit der objekte, das sprite im prinzip von stelle zu stelle gebeamt wird und somit in bestimmten situationen keine kollision bemerkt werden konnte. aber schau dir die verlinkten videos mal an, dann weißt du was ich meine


  • Gruen schrieb:

    Genaue Masken reduzieren die Perfomance je nach Menge der Objekte deutlich.
    Genaue Masken solltest du nur Verwenden wenn für den spielbetrieb unbedingt nötig.


    Okay, danke für den Hinweis;-)
    Kann es sein, weil mein Programm relativ klein ist, und mein PC relativ leistungsfähig, dass ich damit noch keine Probleme hatte?
    Als Anfänger ist es natürlich leichter mit genauen Masken zu arbeiten - wie ich grad erfahren habe.
    Dennoch ist es wohl besser in Zukunft ohne diese auszukommen, was ich gut verstehen kann.

    Bin im Moment grad eher anders beschäftigt als mit GMS. Nämmlich mit Gamen selber:D. Es gibt da dieses Spiel, dass ich grad hoch und runter Zocke...