Hallo,
ich übe mich seit einigen Tagen an Pfaden die das Objekt langlaufen soll und habe jetzt einen Code hinbekommen der am wenigsten Fehler macht. Allerdings zerbreche ich mir den Kopf über den Abschnitt der die alte Kollisionsfläche entfernt und die neue wieder hinzufügt auf dem das Objekt nun steht.
ich möchte das die Fläche nur einmal entfernt oder hinzugefügt wird damit keine Fehler auftreten wenn nun ein anderes Objekt die alte Kollisionsfläche betritt (x_alt und y_alt). Dafür wollte ich repeat(1) verwenden das ich schon ein paar mal erfolgreich eingesetzt habe, allerdings scheint dies in diesem Codeabschnitt nicht zu funktionieren. Der Code in if und in else wird öfter als 1 mal ausgeführt.
Jetzt ist meine Frage wo ich einen Fehler gemacht habe das es öfter als 1 mal ausgeführt wird.
Dies ist der Abschnitt mit repeat(1) den ich meine, steht im Step Event des Spielers:
Alles anzeigen
Falls benötigt hier der Rest vom Code der auch im Step Event des Spielers steht, direkt über dem oberen Codeabschnitt und den Pfad erstellt:
Alles anzeigen
Die Aufgabe den Pfad zu erstellen kommt von "Global Right Pressed" Event des Objektes:
Vielleicht findet jemand den Fehler und kann mir helfen, ich übe schon seit über 4 Tagen nur an Pfaden und wäre echt glücklich wenn ich diesen endlich zum funktionieren bringe.
Vielen vielen Dank für Hilfe.
ich übe mich seit einigen Tagen an Pfaden die das Objekt langlaufen soll und habe jetzt einen Code hinbekommen der am wenigsten Fehler macht. Allerdings zerbreche ich mir den Kopf über den Abschnitt der die alte Kollisionsfläche entfernt und die neue wieder hinzufügt auf dem das Objekt nun steht.
ich möchte das die Fläche nur einmal entfernt oder hinzugefügt wird damit keine Fehler auftreten wenn nun ein anderes Objekt die alte Kollisionsfläche betritt (x_alt und y_alt). Dafür wollte ich repeat(1) verwenden das ich schon ein paar mal erfolgreich eingesetzt habe, allerdings scheint dies in diesem Codeabschnitt nicht zu funktionieren. Der Code in if und in else wird öfter als 1 mal ausgeführt.
Jetzt ist meine Frage wo ich einen Fehler gemacht habe das es öfter als 1 mal ausgeführt wird.
Dies ist der Abschnitt mit repeat(1) den ich meine, steht im Step Event des Spielers:
GML-Quellcode
- if path_position > 0.95 // Pfad hat Ziel erreicht, etwas früher als 1 da es sonst ruckelt und erstellt neuen Pfadabschnitt
- {
- repeat(1)
- mp_grid_clear_cell(global.grid, floor(x_alt / global.netz), floor(y_alt / global.netz)) // alte Kollisionsfläche entfernen
- test += 1
- pfad_erstellen = true // nächsten Pfadabschnitt berechnen
- }
- else
- {
- repeat(1)
- image_angle = direction
- mp_grid_add_cell(global.grid, floor(x / global.netz), floor(y / global.netz)) // aktuelle Kollisionsfläche hinzufügen
- }
Falls benötigt hier der Rest vom Code der auch im Step Event des Spielers steht, direkt über dem oberen Codeabschnitt und den Pfad erstellt:
GML-Quellcode
- if pfad_erstellen = true and maustaste_aktiv = false and distance_to_point(pfad_ziel_x , pfad_ziel_y) > 0.5
- {
- x = floor( x / global.netz) * global.netz + ( global.netz / 2 ) // Objekt auf Kollisionsmittelpunkt setzen x
- y = floor( y / global.netz) * global.netz + ( global.netz / 2 ) // Objekt auf Kollisionsmittelpunkt setzen y
- mp_grid_clear_cell(global.grid, floor(x / global.netz), floor(y / global.netz)) // Kollisionsfläche entfernen um Pfad zu berechnen
- mp_grid_path(global.grid,pfad, x, y, pfad_ziel_x , pfad_ziel_y , true) // vollständigen Pfad erstellen
- mp_grid_path(global.grid,pfad_abschnitt, x, y, path_get_point_x(pfad, 1) , path_get_point_y(pfad, 1) , true) // Pfadabschnitt bis zum 2. Punkt des Hauptpfades erstellen
- mp_grid_add_cell(global.grid, floor(x / global.netz), floor(y / global.netz)) // Kollisionsfläche nach berechnung wieder hinzufügen
- path_start(pfad_abschnitt, 3, 0, 0) // Pfad starten
- x_alt = x
- y_alt = y
- pfad_erstellen = false
- }
Die Aufgabe den Pfad zu erstellen kommt von "Global Right Pressed" Event des Objektes:
Vielleicht findet jemand den Fehler und kann mir helfen, ich übe schon seit über 4 Tagen nur an Pfaden und wäre echt glücklich wenn ich diesen endlich zum funktionieren bringe.

Vielen vielen Dank für Hilfe.