Forum moved to if-forum.org
Autor Nachricht
<  T.A.G.-Online-Tutorium (Juli 2005)
ChrisW
BeitragVerfasst am: Di, 6 Sep 2005 - 13:43  Antworten mit Zitat
Abenteurer
Abenteurer


Anmeldungsdatum: 26.08.2002
Beiträge: 278
Wohnort: Leipzig

Code:
...sec = sec - (sec/60)*60; ...


Entspricht sec = sec%60;

Mit dem Prozentzeichen kriegt man jeweils den Rest einer Division durch den angegebenen Wert.

Das Objekt würde ich ausschließlich mit einem Daemon ausstatten. Der wird auch jeden Zug einmal aufgerufen, dort kannst du die vergangene Zeit in Sekunden einfach so einer lokalen Variable des jeweiligen Objekts abziehen, für die zusätzliche Verwendung eines Timers gibts in deinem Beispiel eigentlich keinen Grund.

Zitat:
Es funktioniert im Reagenzglas, ich weiß aber nicht, welche Nebenwirkungen in einem Spiel auftauchen können. Ich halte das ganze auch nicht für allzu sauber, da ich nicht Zeit simuliere, sondern ich simuliere eine Simulation von Zeit.


Unsauber wirkt es deshalb, weil du die Zeit gleich zweimal simulierst: Per Daemon und per Timer.

Zitat:
Wirklich sauber wäre es, wenn jeder Zug eine Sekunde wäre und bei einer Aktion von 10 Sekunden wirklich 10 Züge vergehen würden. Das wäre dann das, was ChrisW meinte:

ChrisW hat folgendes geschrieben:
Mit anderen Worten: Wenn man denn den Timer in der Statusanzeige will, muss die kleinste angezeigte Zeiteinheit auch die kleinste simulierte Zeiteinheit sein?


Das meinte ich eigentlich nicht. Die jeweils vergangene Zeit muss nicht zwingend mit den Spielzügen zusammenhängen. Was du in der Statusleiste anzeigst, hat mit den Spielzügen ebenfalls erstmal nichts zu tun.

Wenn du allerdings in der Statusleiste eine Zeitanzeige implementierst, dann sollte ein Zug, der (im Gegensatz zu Metabefehlen, zum Beispiel) Zeit verbraucht auch eine Änderung in der Statuszeile bewirken. Damit der Spieler Züge, die Zeit verbrauchen unterscheiden kann von Zügen, die ihn keine Zeit gekostet haben.

Eine Aktion ist und bleibt ein Spielzug. Fertig. Daran würde ich auch nicht drehen.
_________________
"Ein Musiker! Was will der hier so spät?" Stolzing (Meistersinger v.N.)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Kris
BeitragVerfasst am: Di, 6 Sep 2005 - 18:24  Antworten mit Zitat
Kompassleser
Kompassleser


Anmeldungsdatum: 21.02.2004
Beiträge: 198
Wohnort: Rheinmain

ChrisW hat folgendes geschrieben:
Entspricht sec = sec%60;


Danke, wieder was gelernt :-)


ChrisW hat folgendes geschrieben:
Der wird auch jeden Zug einmal aufgerufen, dort kannst du die vergangene Zeit in Sekunden einfach so einer lokalen Variable des jeweiligen Objekts abziehen, für die zusätzliche Verwendung eines Timers gibts in deinem Beispiel eigentlich keinen Grund.


Die lokale Variable behält ihren Wert doch aber nur für die Lebensdauer der Funktion (oder doch nicht?) . D.h. bei jedem Aufruf vom Daemon würde sie neu initialisiert werden.

Den Timer braucht man allerdings nicht starten, könnte aber die Properties time_left (um den übrige Zeit zu speichern) und time_out (um die auszuführende Aktion abzulegen, wobei man das auch im Daemon selbst ablegen könnte) verwenden, um sie vom Daemon aus anzusprechen. Dann spart man sich auch das Abziehen des einen Zuges der dem Timer abgezogen wird. Da habe ich um zu viele Ecken gedacht.


Gruß

Christof
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
ChrisW
BeitragVerfasst am: Di, 6 Sep 2005 - 21:57  Antworten mit Zitat
Abenteurer
Abenteurer


Anmeldungsdatum: 26.08.2002
Beiträge: 278
Wohnort: Leipzig

Ja, ich meinte schon sowas wie time_left und time_out.
_________________
"Ein Musiker! Was will der hier so spät?" Stolzing (Meistersinger v.N.)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Alle Zeiten sind GMT + 1 Stunde (MEZ)

Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Seite 3 von 3
Gehe zu Seite Zurück  1, 2, 3
if-de :: Forum Foren-Übersicht  >  T.A.G.

Neues Thema eröffnen   Neue Antwort erstellen


 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.



Kontakt: Administrator

Powered by phpBB and NoseBleed v1.05