Zeit mitlaufen lassen. Mario Ähnliches Spiel

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

  • Zeit mitlaufen lassen. Mario Ähnliches Spiel

    Hallo,

    kurz zu mir.
    Arbeite erst seid ca. 1 Woche mit GM und bin dadurch natürlich noch Anfänger.

    Auch wenn meine englisch Kenntnisse relativ schlecht sind, möchte ich von vorne rein mit GML Arbeit.

    Nun zu meinem Problem.

    Ich habe ein Spiel ähnlich wie Mario.

    Jetzt möchte ich das oben die Zeit mit läuft.

    Also sobald ich das Level (Room) Starte soll die zeit los laufen.

    Und wenn das Level beendet ist soll die Zeit Stoppen und in einer Highscore liste soll dann stehen wie lange die Spieler gebraucht haben für das Level.

    Kann mir da jemand helfen?

    habe das bis jetzt im Draw event stehen:
    Draw Event:

    Quellcode

    1. ​draw_set_color(make_color_rgb(170,170,20))
    2. draw_set_font(normalfont)
    3. draw_text(view_xview+20,view_yview+10,"Zeit: "+string(minuten)+":"+string(sekunden))


    Create Event:

    Quellcode

    1. ​if instance_number(steuer) > 1
    2. instance_destroy()
    3. else
    4. {
    5. global.geld = 0
    6. global.item1 = 2
    7. }
    8. Minuten = 0
    9. Sekunden = 0

    Nur die Minuten = 0 und Sekunden = 0 habe ich für mein vorhaben eingefügt. Das davor ist für was anderes :)

    vorweg schon mal danke.

    lg Martin @ refreak
  • Du brauchst nur deine Sekunden hochzählen im Step Event :)

    GML-Quellcode

    1. global.sekunden += 1/room_speed;
    2. global.minute = floor(global.sekunde/60)


    alle x steps ist eine sekunde um, standartmäßig 30 steps pro sekunde, also pro step 1/30. Sekunde/60 ist dann eine minute. Dann musst du dir nurnoch überlegen, wie du es handelst das sekunden bei 59 auf 0 springen. Ich würde einmal die variable zum hochzählen machen zB global.time. Die wird dann zerlegt in minuten und sekunden.

    in etwas so:

    GML-Quellcode

    1. global.minute = floor(global.time/room_speed)/60;
    2. global.sekunde = global.time/room_speed-global.minute*60;


    PS: Willlkommen im Forum :)

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • refreak schrieb:

    hm Danke aber das ist ja nur so eine Art countdown


    Wenn du dir 20 Sekunden mehr Zeit genommen hättest, hättest du sicher erkannt, dass es mehr ist. Es enthält Funktionen um die Zeit runter und um sie rauf zu zählen. Dazu kannst du noch wählen, ob du es über die Raumgeschwindigkeit oder current_time machen willst.
    Byte GameMaker Magazin - Online Zeitschrift für Spieleentwickler
  • the_black_wall schrieb:

    refreak schrieb:

    hm Danke aber das ist ja nur so eine Art countdown


    Wenn du dir 20 Sekunden mehr Zeit genommen hättest, hättest du sicher erkannt, dass es mehr ist. Es enthält Funktionen um die Zeit runter und um sie rauf zu zählen. Dazu kannst du noch wählen, ob du es über die Raumgeschwindigkeit oder current_time machen willst.



    the_black_wall :) warscheinlich war mir das gestern Abend einfach zu viel :D ich habe das glaube ich alles nicht so ganz schnallt ;)

    Aku_Ryou danke ich werde es gleich mal testen :)
  • Aku_Ryou schrieb:

    Du brauchst nur deine Sekunden hochzählen im Step Event :)

    GML-Quellcode

    1. global.sekunden += 1/room_speed;
    2. global.minute = floor(global.sekunde/60)


    alle x steps ist eine sekunde um, standartmäßig 30 steps pro sekunde, also pro step 1/30. Sekunde/60 ist dann eine minute. Dann musst du dir nurnoch überlegen, wie du es handelst das sekunden bei 59 auf 0 springen. Ich würde einmal die variable zum hochzählen machen zB global.time. Die wird dann zerlegt in minuten und sekunden.

    in etwas so:

    GML-Quellcode

    1. global.minute = floor(global.time/room_speed)/60;
    2. global.sekunde = global.time/room_speed-global.minute*60;


    PS: Willlkommen im Forum :)



    So habe es jetzt mal getestet.

    Leider kommt dieser Fehler bzw Error wenn ich das Spiel Starte.

    Quellcode

    1. ___________________________________________
    2. ############################################################################################
    3. FATAL ERROR in
    4. action number 1
    5. of Step Event2
    6. for object steuer:
    7. Push :: Execution Error - Variable Get -5.time(100005, -2147483648)
    8. at gml_Object_steuer_StepEndEvent_1 (line 1) - global.minute = floor(global.time/room_speed)/60;
    9. ############################################################################################


    hier noch mal alles beschrieben:

    Create event:

    Quellcode

    1. ​if instance_number(steuer) > 1
    2. instance_destroy()
    3. else
    4. {
    5. global.geld = 0
    6. global.item1 = 2
    7. }
    8. minute = 0
    9. sekunde = 0


    end step event:

    Quellcode

    1. ​global.minute = floor(global.time/room_speed)/60;
    2. global.sekunde = global.time/room_speed-global.minute*60;


    Draw event:

    Quellcode

    1. ​draw_set_color(make_color_rgb(170,170,20))
    2. draw_set_font(normalfont)
    3. draw_text(view_xview+20,view_yview+10,"Zeit: "+string(minute)+":"+string(sekunde))
    4. draw_set_color(make_color_rgb(170,170,0))
    5. draw_set_font(normalfont)
    6. draw_text(view_xview+320,view_yview+10,"Geld: "+string(global.geld))
    7. draw_set_color(make_color_rgb(0,170,170))
    8. draw_set_font(normalfont)
    9. draw_text(view_xview+620,view_yview+10,"Poweritem: "+string(global.item1))
    Alles anzeigen
  • Atomicmaster schrieb:

    Der Fehler besagt das er die Variable global.time nicht kennt / findet.

    Die solltest du vorher auch festlegen. Du hast im Create Event nur "sekunde" und "minute" deklariert.


    Danke dafür ;)

    Die "Zeit" wird jetzt angezeigt allerdings nur 0:0 also sie läuft nicht.
    Habe im Create Event einfach nur eingetragen.

    global.time = 0
  • Jop und du musst noch im step event

    GML-Quellcode

    1. global.time += 1/room_speed;

    hinzufügen. Und zwar bevor du dann minuten und sekunden berechnen lässt.

    Du zählst also einfach mal "Ticks" hoch und dann zerlegst du die Ticks in Minuten und der Rest der überbleibt wird in Sekunden angezeigt.

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • Aku_Ryou schrieb:

    Jop und du musst noch im step event

    GML-Quellcode

    1. global.time += 1/room_speed;

    hinzufügen. Und zwar bevor du dann minuten und sekunden berechnen lässt.

    Du zählst also einfach mal "Ticks" hoch und dann zerlegst du die Ticks in Minuten und der Rest der überbleibt wird in Sekunden angezeigt.


    habe ich eingefügt.

    Zeit läuft leider trotzdem nicht :(

    der Room Speed ist übrigens in meinen Levels auf 60.
  • So, ich hab mal ein altes Projekt ausgegraben, damit ich dir genauen und getesteten code geben kann^^

    Step Event:

    GML-Quellcode

    1. time += 1;
    2. sekunde = time/room_speed;
    3. if sekunde == 60
    4. {
    5. minute += 1;
    6. sekunde = 0
    7. time = 0;
    8. }


    Draw Event

    GML-Quellcode

    1. draw_sprite(spr_numbers_italic,minute/10,42,5);
    2. draw_sprite(spr_numbers_italic,minute,54,5);
    3. draw_sprite(spr_numbers_italic,10,64,5);//doppelpunkt
    4. draw_sprite(spr_numbers_italic,sekunde/10,76,5);
    5. draw_sprite(spr_numbers_italic,sekunde mod 10,88,5);


    das draw event drawed zwar keinen Test sondern images aber es zeigt dir wie das mit divisionen und divisionsrest(mod) die doppel 0 hinbekommt damit das folgendes Format hat: 00:00.

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • Du brauchst einfach eine variable die kontrolliert ob die zeit gerade laufen darf.

    GML-Quellcode

    1. if time_active == 1
    2. {
    3. time += 1/room_speed;
    4. }

    bei berührung mit dem ausgang oder wenn der Spieler das inventar aufruft, oder pause oder wann auch immer du es brauchst musst du nur time_active auf 0 setzen :D

    ancient-pixel.com
    youtube.com/user/SebastianMerkl <<< ich freu mich über einen Besuch ;)
  • Aku_Ryou schrieb:

    Du brauchst nur deine Sekunden hochzählen im Step Event :)

    GML-Quellcode

    1. global.sekunden += 1/room_speed;
    2. global.minute = floor(global.sekunde/60)


    alle x steps ist eine sekunde um, standartmäßig 30 steps pro sekunde, also pro step 1/30. Sekunde/60 ist dann eine minute. Dann musst du dir nurnoch überlegen, wie du es handelst das sekunden bei 59 auf 0 springen. Ich würde einmal die variable zum hochzählen machen zB global.time. Die wird dann zerlegt in minuten und sekunden.

    in etwas so:

    GML-Quellcode

    1. global.minute = floor(global.time/room_speed)/60;
    2. global.sekunde = global.time/room_speed-global.minute*60;


    PS: Willlkommen im Forum :)


    Noch bequemer (ohne if abfragen) geht so:

    GML-Quellcode

    1. timer += 1/room_speed;
    2. sekunden = timer mod 60; //Sekunden sollen nur von 0-59 ablaufen.
    3. minuten = (timer div 60) mod 60; //60 sek / 60 sek = 1 minute, 120 sek / 60 sek = 2 minute. Auch Minute sollte von 0-59 ablaufen.
    4. stunden = (timer div 3600) mod 24; //Wie bei Minute -> 60 min / 60 min = 1h, 120 min / 60 min = 2 Stunden. Bei Stunden sollte von 0-23 ablaufen. | 3600 = 3600 Sekunden = 1 Stunde.


    Schon hat man vollfunktionstüchtige Timer. Am ende könnte man einfach im Draw Event so einbauen:

    GML-Quellcode

    1. draw_text(x, y, string(stunden) + ":" + string(minuten) + ":" + string(sekunden))


    Nur ein kleiner anmerkung. ^^
    Ihr stinkt.
  • Aku_Ryou schrieb:

    Du brauchst einfach eine variable die kontrolliert ob die zeit gerade laufen darf.

    GML-Quellcode

    1. if time_active == 1
    2. {
    3. time += 1/room_speed;
    4. }

    bei berührung mit dem ausgang oder wenn der Spieler das inventar aufruft, oder pause oder wann auch immer du es brauchst musst du nur time_active auf 0 setzen :D



    Habe deinen Code in das end step event mit eingefügt.
    Leider kommt dann immer diese Meldung :(

    Quellcode

    1. ___________________________________________
    2. ############################################################################################
    3. FATAL ERROR in
    4. action number 1
    5. of Step Event2
    6. for object steuer:
    7. Push :: Execution Error - Variable Get 100020.time_active(100004, -2147483648)
    8. at gml_Object_steuer_StepEndEvent_1 (line 14) - if time_active == 1
    9. ############################################################################################
    Alles anzeigen
  • mach im Create

    GML-Quellcode

    1. ​time_active = false;

    Der kennt die Variable nicht
    Ein Bug ist mehr als nur ein Bug, es ist ein... Käfer!
    Egal, wie gut du eine Mauer baust, sie fällt um.... der klügere gibt nach :D

    Willst du mit mir auf Discord Chatten/Quatschen?
    Meine Husi's Tutorial Reihe