Grafischer Zeitbalken und Pausemodus
Übersicht

![]() |
JamaginBetreff: Grafischer Zeitbalken und Pausemodus |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ich habe in meinem Projekt einen grafischen Zeitbalken eingebaut (Timergesteuert) und habe nun das Problem, wenn man in den Pausemodus geht und nach einer gewissen Zeit das Spiel wieder weiterspielt, wird vom grafischen Zeitbalken mehr abgezogen. Wie kann ich das machen, dass der Zeitbalken, wenn dieser angehalten wird von dort weiterläuft ab derer Position dieser angehalten wurde.
Die Funktionen die diesen steuern sind jene: Beim ersten Mausklick ins Spielfeld wird der Timer gestartet mit Code: [AUSKLAPPEN] If TIMETOGO = 0 TIMETOGO = 1 fulltimer = millisecs() endif In der Spielschleife rufe ich alle millisecs() + 1000 die Funktion update_Timeline() auf. In der Initialisierung erstelle ich den grafischen Zeitbalken mit Code: [AUSKLAPPEN] total_time_measure = zeit_min * 60000 fulltime = HUD_CreateImage (ObjectID, xpos, ypos, clip_x, clip_y, clip_w, clip_h) Und die Update Funktion sieht so aus: Code: [AUSKLAPPEN] Funktion updateTimeline() elapsed_time = millisecs() - fulltimer current_length = (fullheight * (total_time_measure - elapsed_time)) / total_time_measure HUD_ChangeImageSize (fulltime, current_length, clip_h) End Function Wenn man nun den Pausemodus aufruft setze ich TIMETOGO auf 0 und wenn man den Pausemodus wieder verlässt, setze ich TIMETOGO auf 1. Nun wird aber, da fulltimer = millisecs() beim ersten Klick ins Spielfeld initialisiert wurde, in der Funktion updateTimeline() von der elapsed_time abgezogen, trotz Pausemodus, weil ich ja in der Initialisierung die Windowszeit hergenommen habe. Dadurch das das Spiel im Pausemodus angehalten wird, jedoch die Windowszeit weiterläuft, stimmt das dann mit der Grafik des Zeitbalkens und der Berechnung nicht mehr zusammen! Hat da jemand eine Idee wie ich die Zeit des Pausenmodus berücksichtigen kann, damit auch der grafische Zeitbalken richtig funktioniert? Ich weiß, ich habe das jetzt kompliziert erklärt, doch hoffe ich das es jemand verstanden hat wie das gemeint ist! Jamagin |
||
Bevor du etwas neues beginnst, erledige das alte |
Kruemelator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wenn du in die Pause Wechselst merkst du die die "elapsed_time". Wenn du die Pause verläst setzt du fulltimer zu:
BlitzBasic: [AUSKLAPPEN] fulltimer = MilliSecs() + elapsed_time |
||
![]() |
Jamagin |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Kruemelator,
danke für deine schnelle Antwort. Das klappt ganz gut mit deiner Idee, jedoch ist da der Zeitbalken wieder komplett gefüllt und das soll er aber nicht! ![]() Jamagin |
||
Bevor du etwas neues beginnst, erledige das alte |
![]() |
Midimaster |
![]() Antworten mit Zitat ![]() |
---|---|---|
wäre nicht auch....
BlitzBasic: [AUSKLAPPEN] fulltimer = fulltimer + elapsed_time ...möglich? |
||
Gewinner des BCC #53 mit "Gitarrist vs Fussballer" http://www.midimaster.de/downl...ssball.exe |
Kruemelator |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@Midimaster:
Nein das würde nicht gehen, denn es wird nicht die länge der Pause berücksichtigt. @Jamagin: Mein Fehler, müsste so sein: BlitzBasic: [AUSKLAPPEN] fulltimer = MilliSecs() - elapsed_time |
||
![]() |
Jamagin |
![]() Antworten mit Zitat ![]() |
---|---|---|
@Midimaster,
nö, da wäre der Wert ja noch größer der abgezogen wird. In der Initialisierung setze ich ja fulltimer = millisecs() Ich bin jetzt soweit, daß ich sämtliche Variablen am Stopwert halten kann, jedoch die current_length wird weitergerechnet und da ist das Problem. Das komische ist aber, da ich auch einen Zeitstopper dabei habe wo die Zeit während des Spieles 20 Sekunden angehalten wird. Da habe ich dann fulltimer = fulltimer + 20000 als Beispiel und das klappt aber! Nach Ablauf der 20 Sekunden läuft der grafische zeitbalken genau da weiter wo dieser eben angehalten wurde. Ich habe auch schon versucht in der Pauseroutine einen Zeittimer mitlaufen zu lassen und diese Zeit dann dazugerechnet. Geht aber nicht! Das verstehe ich nicht! Jamagin |
||
Bevor du etwas neues beginnst, erledige das alte |
![]() |
XeresModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
Merke dir, wie weit der Timer schon abgelaufen ist, und starte den Timer neu mit der, seit der Pause verstrichenen Zeit:
BlitzBasic: [AUSKLAPPEN] If Pause Then |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
![]() |
Jamagin |
![]() Antworten mit Zitat ![]() |
---|---|---|
Danke für eure Tipps!
Ich habe es so lösen können! Vor dem Funktionsaufruf habe ich einfach Code: [AUSKLAPPEN] ms1 = millisecs() pe_pausemodus() fulltimer = fulltimer + (millisecs()-ms1) Mann, eh so einfach aber ich hab es echt nicht geschnallt! Anstelle von pe_pausemodus() kann auch pe_Beenden() stehen, überall wo das Spiel angehalten wird muß ich das berücksichtigen!!! Jamagin |
||
Bevor du etwas neues beginnst, erledige das alte |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group