GM:S Counter in Background

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

  • GM:S Counter in Background

    Hallo,

    ich programmiere gerade an einem android spiel, bräuchte aber eure hilfe....

    ich möchte zb: dass die Variabel Test 1 um eins jede sekunde erhöht.... dies passiert einfach so....

    doch die app wird auch mal im background gesetzt.... somit wird die variabel test 1 nicht um eins erhöht, erst wenn sie im vordergrund ist wird sie wieder erhöht...
    womit kann ich arbeiten? Push notificaations denke ich wären dumm, jede sekunde impulse zu definieren... kann ich was mit dem events asyncrounous machen?

    danke
  • Ich kenne nur eine Methode, aber ich glaube die ist auch nicht die beste ^^
    Man könnte feststellen ob das Spiel gerade nicht mehr im Focus ist und dann die aktuelle Uhrzeit in
    eine Variable speichern. Wenn das Spiel wieder im Focus ist, musst du einfach nur die Differenz zwischen der aktuellen
    Zeit und der gespeicherten Zeit in Sekunden ausrechnen und dann auf die "Zähler"-Variable addieren.

    Das ist wie gesagt die einzige Methode die ich kenne, ich habe mich auch nicht viel damit beschäftigt.
  • ganz ehrlich...wenn ich diese in eine ini speicher, diese auslese und zeichne.... die app wird so slow.... dann haut das system mir diese komplett raus.... gibt es da ne async lösung???????


    Das verstehe ich nicht ganz. Ich dachte du willst einfach nur eine Variable hochzählen.
    Das ganze sollte eigentlich nichts an der performance verändern ^^
  • ok, ich werde klarer ^^ ich will ein spiel machen, indem du x minuten brauchst um ein haus zb upzugraden.... die x minuten wartet der spieler ja nicht.... als auch im backgraund brauch ich das, dass der spieler auch an dem timer sieht, wie lage er noch braucht.... wie setze ich das denn nu um?
  • ok, also wenn du ein Gebäudeupgrade startest, dann speicherst du dir (z.b. im Gebäude) ab, wann das Upgrade gestartet wurde.
    also:

    GML-Quellcode

    1. upgradeStartedTime = date_current_datetime();


    Als nächstes musst du angeben, wann das Upgrade fertig ist.

    GML-Quellcode

    1. upgradeFinishedTime = date_inc_second(upgradeStartetTime, upgradeTimeInSeconds);

    date_inc_second addiert zu einem gegebenen Zeitstempel die Upgradezeit in Sekunden hinzu und gibt einen neuen Zeitstempel zurück.

    nun fehlt nur noch der anzuzeigende Wert

    GML-Quellcode

    1. remainingUpgradeTime = date_second_span(date_current_datetime(), upgradeFinisheTime);

    date_second_span gibt den Unterschied zwischen zwei Zeitstempel in Sekunden zurück. In diesem Fall die aktuelle Zeit und der Zeitpunkt zu dem dein Upgrade fertig ist.

    Den Wert remainingUpgradeTime kannst du dann im Draw-Event zeichnen lassen und du bist fertig.

    Da du mit dieser Methode keinen Timer hochzählen musst, wird die verbleibende Zeit immer korrekt ausgerechnet. Auch wenn du zwischendurch dein Spiel beendest.
    Wenn du das Spiel beendest musst du natürlich speichern und beim weiterspielen den Spielstand laden, aber das versteht sich ja von selbst ;)

    LG

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