Echtzeit ( Daily Bonus) Berechnung von Werten ohne im Spiel zu sein.

  • Antworten:5
  • Bentwortet
Frederik B.
  • Forum-Beiträge: 53

31.03.2015, 22:27:53 via Website

Hallihallo,

ich wollte mal fragen, wie man am besten einen "Daily Bonus" oder eher allgemein mit Echtzeit umgeht.
Auf meiner Suche nach einer passenden Klasse etc. bin ich nicht wirklich fündig geworden.

Letzten Endes bin ich dann auf den Kalendar ausgewichen, der aber einige Probleme bereitet.
Bei meinen Beispiel geht es darum, dass man jede Sekunde Spielwährung erhält, also auch wenn man nicht spielt, nur stimmen die Zahlen gelegentlich überhaupt nicht.

Umgesetzt habe ich das, indem ich mir jede sekunde die Werte von Monat, Tag, Stunde, Minute, Sekunde speicher und falls man dann die App beendet sind die letzten Daten gespeichert. Beim Wiederöffnen werden erneut die Daten abgefragt und mit den alten verglichen (also quasi 'Werte' - 'alte Werte'). Das System sollte rechnerisch eigentlich funktionieren,
aber naja tut es praktisch halt nicht so. :D

Also wollte ich mal fragen, ob das nicht irgendwie besser geht? Manche Apps schicken ja sogar Benachrichtigungen raus, obwohl man sie komplett nicht öffnen, also muss es ja irgendwie möglich sein.:D(thinking)

— geändert am 31.03.2015, 23:01:56

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

31.03.2015, 22:34:56 via App

Hallo Frederik,

Bitte beachte, dass Threads mit nicht aussagekräftigem Titel bei uns üblicherweise den Regeln entsprechend entfernt werden. Ich bitte dich daher, deinen Threadtitel innerhalb der nächsten 24 Stunden, spätestens jedoch bei deinem nächsten Besuch noch etwas aussagekräftiger zu gestalten (Hierfür einfach unter deinem ersten Beitrag auf 'bearbeiten' klicken, dann kannst du oben noch mal den Titel anpassen)

Danke :)



Wenn alles richtig berechnet wird, dann sollte es gehen. Also rechnest du noch irgendwas falsch. Wie sieht denn dein Code aus?

Wenn du es anders machen willst, dann machst du nen Service im Hintergund. Das kostet aber Akku etc.
LG Pascal

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Frederik B.
  • Forum-Beiträge: 53

31.03.2015, 23:01:04 via Website

    int month = c.get(Calendar.MONTH);
    int date = c.get(Calendar.DATE);
    int hour = c.get(Calendar.HOUR);
    int minute = c.get(Calendar.MINUTE);
    int seconds = c.get(Calendar.SECOND);

    month -= lastMonth;
    date -= lastDate;
    hour -= lastHour;
    minute -= lastMinute;
    seconds -= lastSecond;
    money += seconds * value;
    money += minute * 60 * value;
    money += hour * 3600 * value;
    money += date * 86400 * value;
    money += month * 2678400 * value; 

wobei alle Variablen mit 'last-' die zuletzt gespeicherten sind und vorher geladen werden.
"value" ist der Wert den man pro sekunde bekommt.
Und "money" ist halt das ganze Geld was man gesammelt hat.

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

01.04.2015, 01:11:01 via App

Warum so umständlich?
Nimm ei fach die Unix Tim (glaub das was System.getCurrentMillis() ) in ms als long und speichere diesen. Dann kannst du die alte von der aktuelle subtrahieren und hast dann deine Zeitdiff in millisekunden. Diese kannst du dann in deine Währung umrechnen.
so sparst du dir die ganzen Multiplikationen und muss bei der Auswertung nur noch ms in s umrechnen

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Frederik B.
  • Forum-Beiträge: 53

01.04.2015, 19:14:32 via Website

Hmm ja gute Frage, hatte mir bis jetzt noch nie die Beschreibung bei System.currentTimeMillis durchgelesen. :D
Hab das jetzt mal ersetzt, hoffe das es nun auch alles richtig klappt.

Aber schon mal ein riesen Dankeschön für die schnelle Hilfe! :)

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

01.04.2015, 19:17:54 via App

Kein Problem :)

Bitte setze deinen Thread noch auf Beantwortet, indem du im Browser über deinem ersten Post auf "Mehr"->"Beantwortet" klickst.

Danke (smug)

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten