Relative (Rückwärts!)

  • Relative (Rückwärts!)

    Tag! Ich habe ein einfaches Problem. Wenn man die Rechte Pfeiltaste loslässt,
    soll man nicht sofort Anhalten, sondern immer langsamer werden, und dann Anhalten.
    Halt die Relative funktion Rückwärts. Das kann man bestimmt nur mit GML machen,
    deswegen bitte ich um den Code. Danke!
    15.04.09/ Zustand: CRACK
  • Ichg würde es so lösen.
    du macht ein key-release event für z.B. die rechte pfeiltaste.
    wenn die losgelassen wird setzt sich eine variable auf 1(von 0).
    im step event lässt du dann checken ob die 1 ist und wenn ja, dann machste einfach speed-=0.1 oder so. je nachdem wie schnell der langsamer werden soll.
    und dann amchste da noch if speed=0, dann wird die variable wieder auf 0 gesetzt.

    denke aber das eine leicht praktischere lösung gibt.
    Aktuelles Projekt: Aufbau - Strategiespiel.
    Aktueller Entwicklungsschritt: Planung | Grundengine entwickeln.

    Wichtig ist nicht, besser zu sein als alle anderen.
    Wichtig ist, besser zu sein als du gestern warst.





  • Wenn ich das richtig verstanden habe, hilft dabei:

    GML-Quellcode

    1. friction


    Setz dafür einfach einen geringen Wert (z.B. "friction = 0.1"). Dann hat dein Fahrzeug immer Reibung und wird demnach langsamer (bis zum Stillstand), wenn du nicht mehr beschleunigst.
    █████ ██ █ ████ everything ███ █████ is █████ ████ ████ fine ████ ███ █ ██████ love.
    █████ ███████ ███ your █████ ████ government.
  • Hier mal ein Beispiel, wie ich das mache - zwar sehr umständlich, aber machbar. :D

    Also zuerst legst du im Create Event wichtige Variablen fest (z.B. wie schon gesagt Friction). So sieht das bei mir aus:

    GML-Quellcode

    1. speed = 0;
    2. maxspeed = 6;
    3. minspeed = -3;
    4. friction = 0.5;
    5. ruckwarts = 0;
    6. sprite_set_offset(spr_Auto1,87.5,250);
    7. sprite_set_offset(spr_Auto1_blitzlicht,87.5,250);
    8. sirene = 0;
    9. blitzlicht = 0;
    10. image_speed = 0.45;
    11. maxdrehung = 2;
    12. patientberuehrt = 0;
    Alles anzeigen


    Und dann die eigentliche Steuerung im Step Event:

    GML-Quellcode

    1. image_angle = direction-90;
    2. if (keyboard_check(ord('W'))) {speed += 1}
    3. if (keyboard_check(ord('S'))) {speed -= 1}
    4. if (keyboard_check(ord('A')) && keyboard_check(ord('S'))) {direction += 1}
    5. if (keyboard_check(ord('A')) && keyboard_check(ord('W'))) {direction += maxdrehung}
    6. if (keyboard_check(ord('D')) && keyboard_check(ord('S'))) {direction -= 1}
    7. if (keyboard_check(ord('D')) && keyboard_check(ord('W'))) {direction -= maxdrehung}
    8. if (speed >= maxspeed) {speed = maxspeed}
    9. if (speed <= minspeed) {speed = minspeed}
    10. if (sirene == 0 && keyboard_check(ord('Q'))) {sound_loop(snd_sirene1) sirene = 1 maxspeed = 13 minspeed = -5 maxdrehung = 3}
    11. if (sirene == 1 && keyboard_check(ord('E'))) {sound_stop(snd_sirene1) sirene = 0 maxspeed = 6 minspeed = -3 maxdrehung = 2 blitzlicht = 0 sprite_index = spr_Auto1}
    12. if (sirene == 1 && blitzlicht = 0) {sprite_index = spr_Auto1_blitzlicht blitzlicht = 1}
    Alles anzeigen



    Wie schon gesagt. Das darf und kann bei dir auch komplett anders aussehen. :D Ich glaube, nicht jeder arbeitet so wie ich. :P

    //EDIT:

    Hoppa! Ignoriere einfach das "Blitzlicht" und "Sirene". ;)
  • fabse64 schrieb:

    Oder du schreibst ins Step Event von deinem Player:

    GML-Quellcode

    1. if not keyboard_check(vk_left) and not keyboard_check(vk_right) { hspeed = hspeed / 1.2; /* oder anderer wert */ }


    Wenn du das allerdings machst, wird der Speed NIEMALS 0, denn was durch etwas geteilt wird, verkleinert sich nur immer mehr, ohne tatsächlich Null zu erreichen.

    Und den Code von Michaelp800 kann ich selbst auch nur schwer nachvollziehen. 8|

    Ich empfehle da also die Lösung von gamer: Du definierst im Create-Event eine Variable, die du auf 0 setzt. Im Key-Released-Event der Steuerungstasten setzt du sie dann auf 1 und schreibst ins Step Event:

    GML-Quellcode

    1. if brems=1{
    2. speed-=0.1 //Oder anderer niedriger Wert
    3. if speed<0 /*Wenn Geschwindigkeit unter Null*/{
    4. speed=0 //Geschwindigkeit auf Null (Stopp)
    5. brems=0} // Und Ende
    6. }


    Das sollte dein Problem lösen ^^


    €Dith sagt:
    "var" nimmste besser nicht als Namen für die Variable XD *änder*
  • Benutzer online 1

    1 Besucher