Planeten Gravity+laufen

  • GM 8

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

  • Planeten Gravity+laufen

    Ich will gerade eine "Planeten-Engine" machen, so wie sie hier ist: youtube.com/watch?v=ZekCbS281OQ
    Ich hab jetzt ein obj_Typ das sich immer den nähesten Punkt von den Planeten sucht und dort dann durch die gravity hingezogen wird.
    Hier das step-Event:

    GML-Quellcode

    1. for (i=0; !collision_circle(x,y,i-1,obj_Planet,1,0); i+=1)//Hier macht er einen Kreis der immer größer wird bis er ein Planet entdeckt...
    2. {
    3. if collision_circle(x,y,i,obj_Planet,1,0)
    4. {
    5. for (j=0; j<360; j+=1)//...dann sucht noch auf welcher Position im Kreis der Planetpunkt ist(in welcher richtung)
    6. {
    7. if collision_line(x,y,x+lengthdir_x(i,j),y+lengthdir_y(i,j),obj_Planet,1,0)
    8. {
    9. zielx = x+lengthdir_x(i,j)//Das sind die Variablen wo die Gravity hinzeigt
    10. ziely = y+lengthdir_y(i,j)
    11. }
    12. };
    13. }
    14. };
    15. gravity_direction=point_direction(x,y,zielx,ziely)
    16. image_angle = gravity_direction+90
    17. if !instance_position(x+hspeed,y+vspeed,object0)
    18. {gravity = 1}
    19. else
    20. {
    21. gravity = 0
    22. speed = 0
    23. }
    Alles anzeigen


    So das funktioniert, außer dass der Typ nicht Perfekt am Planeten anhält, aber das größere Problem ist wie kann ich machen das er wie in dem Video läuft, mit den Pfeiltasten rechts und links?
    Also wie kann ich machen das der Typ auf dem Planeten läuft?
    Twitter: @BytingGames
  • Dies sollte eigentlich relativ simpel mit der Funktion collision_point zu lösen sein:

    GML-Quellcode

    1. // find next point right
    2. for (i = 270; i < 450; i += 1) {
    3. checks[i] = collision_point(x + lengthdir_x(speed, i), y + lengthdir_y(walking_speed, i), obj_Planet, 1, 0);
    4. if ((i > 270) && (checks[i] ^^ checks[i - 1])) {
    5. found_point_x = x + lengthdir_x(walking_speed, i);
    6. found_point_y = y + lengthdir_y(walking_speed, i);
    7. break;
    8. }
    9. }
    Alles anzeigen


    Bei Performanceproblemen kann ich dir gerne eine Methode erläutern, die diese optimieren sollte.

    Dieser Beitrag wurde bereits 8 mal editiert, zuletzt von cafaxo ()

  • Entschuldigung wegen der fehlenden Anleitung zum Code, ich dachte dies sollte klar sein.
    Der Code ermittelt ganz einfach den nächsten rechtsgelegenen Punkt, was ja zur Bewegung notwendig ist.

    Ich dachte, dass du die Idee dahinter verstehst und sogleich den Code für die andere Richtung herleiten kannst:

    GML-Quellcode

    1. // find next point left
    2. for (i = 90; i < 270; i += 1) {
    3. checks[i] = collision_point(x + lengthdir_x(speed, i), y + lengthdir_y(walking_speed, i), obj_Planet, 1, 0);
    4. if ((i > 90) && (checks[i] ^^ checks[i - 1])) {
    5. found_point_x = x + lengthdir_x(walking_speed, i);
    6. found_point_y = y + lengthdir_y(walking_speed, i);
    7. break;
    8. }
    9. }
    Alles anzeigen


    PS: Ich würde an deinem Code außerdem grundlegende Optimierungen vornehmen. Dieser ist außerdem nur für das Springen notwendig.
    PPS: Wenn du es immer noch nicht ganz nachvollziehen kannst, stelle ich dir gerne ein Example zusammen.

    Edit: Da mir bedauerlicherweise ein kleiner Fehler unterlaufen ist, habe ich die Codes korrigiert.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von cafaxo ()

  • Achso ok ja ich habs getestet aber irgendwie funktioniert das nicht so gescheit der Spieler bleibt voll oft im Boden stecken,
    und die Gravity stimmt auch nicht immer ganz.
    Wär echt nett wenn du mir n Example machen würdest :thumbsup:
    Ich schau mir solang die Codes von dem Spiel von Yoyogames durch.

    Und ich benutz GM8 nur so zur Info, hab aber einen GM 8.1 zu 8 Converter.
    Twitter: @BytingGames