AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Ressourcen pro Sekunde generieren

Ein Thema von heel213 · begonnen am 27. Jan 2017 · letzter Beitrag vom 25. Feb 2017
Antwort Antwort
Seite 1 von 2  1 2      
a.def
(Gast)

n/a Beiträge
 
#1

AW: Ressourcen pro Sekunde generieren

  Alt 27. Jan 2017, 10:52
Nein ein Timer macht was vollkommen anderes als das was du willst.
Was du meinst ist Sleep(1000); Aber wenn du Sleep(1000); machst... guck dir mal an wieviele Schleifendurchgänge du hast. Das würde 3 Jahre dauern.
  Mit Zitat antworten Zitat
SProske

Registriert seit: 16. Feb 2015
Ort: Halle/S.
116 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

AW: Ressourcen pro Sekunde generieren

  Alt 27. Jan 2017, 10:56
Müsste nicht das Hochsetzen der Produktion in die onTimer-Methode rein und der Timer einfach nur gestartet werden? Oder verstehe ich das völlig falsch?
Sebastian
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#3

AW: Ressourcen pro Sekunde generieren

  Alt 27. Jan 2017, 10:57
So sehe ich das auch. Das muss in den Timer, welcher im OnCreate (oder woanders...) gestartet wird.
Sonst blockierst du dir den Button.
  Mit Zitat antworten Zitat
Benutzerbild von Valle
Valle

Registriert seit: 26. Dez 2005
Ort: Karlsruhe
1.223 Beiträge
 
#4

AW: Ressourcen pro Sekunde generieren

  Alt 27. Jan 2017, 10:58
Ich würde dir, unabhängig von deinem Problem, übrigens empfehlen dich nicht auf die Zeit des Timers zu verlassen. Rechne stattdessen lieber selbst aus, wie viel Zeit seit der letzten Messung vergangen ist und berechne daran den Resourcengewinn. Sonst wird es längerfristig zu starken Abweichungen kommen.
Valentin Voigt
BOFH excuse #423: „It's not RFC-822 compliant.“
Mein total langweiliger Blog
  Mit Zitat antworten Zitat
a.def
(Gast)

n/a Beiträge
 
#5

AW: Ressourcen pro Sekunde generieren

  Alt 27. Jan 2017, 11:00
Ich würde dir, unabhängig von deinem Problem, übrigens empfehlen dich nicht auf die Zeit des Timers zu verlassen. Rechne stattdessen lieber selbst aus, wie viel Zeit seit der letzten Messung vergangen ist und berechne daran den Resourcengewinn. Sonst wird es längerfristig zu starken Abweichungen kommen.
Sag mal einem Sachbearbeiter der soll ein Haus bauen. Ungefähr so fühlt sich der Themenersteller jetzt

Zitat:
Die Funktion soll ja auch möglichst unendlich lange gehen, damit immer nebenbei die Ressourcen generiert werden,
Pack das trotzdem in den Timer sonst macht das alles gar keinen Sinn.
  Mit Zitat antworten Zitat
Benutzerbild von markus5766h
markus5766h

Registriert seit: 5. Mär 2009
Ort: Hamburg
569 Beiträge
 
Delphi XE8 Professional
 
#6

AW: Ressourcen pro Sekunde generieren

  Alt 27. Jan 2017, 12:53
Moin.

Soll das so etwas wie Zivilisation werden ?

Wenn ja, wird eine Schleife nicht benötigt :
Zivilisation ist ein Runden-basiertes Spiel, d.h. Ressourcen werden je Runde aktualisiert,
nachdem alle Spieler (oder auch Engines) ihre Aktionen durchgeführt haben - die Resourcenänderung ist ja von
den Aktionen der Spieler abhängig . . .
Markus H.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: Ressourcen pro Sekunde generieren

  Alt 27. Jan 2017, 13:27
Okay Timer kurz erklärt:

Du willst ein Stück Code regelmäßig ausführen?

1) Zieh dir einen Timer aufs Formular (Name "Timer1" als Beispiel)
2) Setze die Eigenschaft "Interval" auf das Zeitinterval in Millisekunden in dem du deinen Code ausgeführt haben willst. (1000 = 1x pro Sekunde)
3) Wechsel auf das "Ereignisse" Tabsheet des Timers im Objektinpektor und klicke doppelt auf die leere Fläche rechts von "OnTimer".
4)

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  // Hier kommt der Code hin der jede Sekunde ausgeführt werden soll
end;
In deinem Fall also so:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Luxusgueter:=Luxusgueter+Luxusgueterproduktion;
  Stein:=Stein+Steinproduktion;
  Nahrung:=Nahrung+Nahrungproduktion;
  Gold:=Gold+Goldproduktion;
  label13.caption:=floattostrf(Stein,fffixed,10,0);
  label14.caption:=floattostrf(luxusgueter,fffixed,10,0);
  label15.caption:=floattostrf(Nahrung,fffixed,10,0);
  label16.caption:=floattostrf(gold,fffixed,10,0);
  label17.caption:=inttostr(einwohner);
end;
5) Ein Timer ist standardmäßig angeschaltet, würde also sobald du das Formular bzw. die Anwendung öffnest anfangen den Code auszuführen.
Wenn du das nicht willst stell die Eigenschaft "Enabled" im Objektinspektor erst mal auf false und um den Timer zu aktivieren setzt du dann einfach irgendwo
im Quelltext (also da wo du ihn an/aus schalten willst) Timer1.Enabled := true (oder auch wieder auf false, falls du die Rohstoffproduktion wieder abschalten willst).

HINWEIS: Mach es NICHT mit dieser Schleife und Application.ProcessMessages! Das ist auf unendlich viele Arten schlecht und falsch!
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."

Geändert von Neutral General (27. Jan 2017 um 13:31 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von heel213
heel213

Registriert seit: 23. Jan 2017
Ort: Authority
10 Beiträge
 
#8

AW: Ressourcen pro Sekunde generieren

  Alt 24. Feb 2017, 23:59
Okay Timer kurz erklärt:

Du willst ein Stück Code regelmäßig ausführen?

1) Zieh dir einen Timer aufs Formular (Name "Timer1" als Beispiel)
2) Setze die Eigenschaft "Interval" auf das Zeitinterval in Millisekunden in dem du deinen Code ausgeführt haben willst. (1000 = 1x pro Sekunde)
3) Wechsel auf das "Ereignisse" Tabsheet des Timers im Objektinpektor und klicke doppelt auf die leere Fläche rechts von "OnTimer".
4)

Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  // Hier kommt der Code hin der jede Sekunde ausgeführt werden soll
end;
In deinem Fall also so:
Delphi-Quellcode:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Luxusgueter:=Luxusgueter+Luxusgueterproduktion;
  Stein:=Stein+Steinproduktion;
  Nahrung:=Nahrung+Nahrungproduktion;
  Gold:=Gold+Goldproduktion;
  label13.caption:=floattostrf(Stein,fffixed,10,0);
  label14.caption:=floattostrf(luxusgueter,fffixed,10,0);
  label15.caption:=floattostrf(Nahrung,fffixed,10,0);
  label16.caption:=floattostrf(gold,fffixed,10,0);
  label17.caption:=inttostr(einwohner);
end;
5) Ein Timer ist standardmäßig angeschaltet, würde also sobald du das Formular bzw. die Anwendung öffnest anfangen den Code auszuführen.
Wenn du das nicht willst stell die Eigenschaft "Enabled" im Objektinspektor erst mal auf false und um den Timer zu aktivieren setzt du dann einfach irgendwo
im Quelltext (also da wo du ihn an/aus schalten willst) Timer1.Enabled := true (oder auch wieder auf false, falls du die Rohstoffproduktion wieder abschalten willst).

HINWEIS: Mach es NICHT mit dieser Schleife und Application.ProcessMessages! Das ist auf unendlich viele Arten schlecht und falsch!
Vielen vielen Dank, das war genau das, was ich brauchte!
Der, der die Company zerstören wird aka der Heelischste von allen.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.339 Beiträge
 
Delphi 12 Athens
 
#9

AW: Ressourcen pro Sekunde generieren

  Alt 27. Jan 2017, 20:23
Und nochmal kurz zu dem Problem mit den ungenauen Timern.
Die Timer sind nicht ganz genau, je kürzer das Interrval ist.
Und wenn dein Programm oder der PC etwas "hängt" (ausgelastet ist), dann bleibt der Timer quasi kurz stehen.

Stichwort: Interpolation

Da ist es dann egal, ob der Timer alle 0.5 , 1 oder 55 Sekunden auslöst.

* einfach den Zeitpunkt des Starts, bzw. des letzten Updates merken
* ausrechnen wieviel Zeit seitdem vergangen ist, in Sekunden
* und das mit dem WertProSekunde multipliziert dazuaddieren
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Klaus01
Online

Registriert seit: 30. Nov 2005
Ort: München
5.779 Beiträge
 
Delphi 10.4 Sydney
 
#10

AW: Ressourcen pro Sekunde generieren

  Alt 27. Jan 2017, 10:59
... wieso berechnest Du nicht erst die Werte und gibst sie dann aus?

Delphi-Quellcode:
  repeat
      begin
      Luxusgueter:=Luxusgueter+Luxusgueterproduktion;
      Stein:=Stein+Steinproduktion;
      Nahrung:=Nahrung+Nahrungproduktion;
      Gold:=Gold+Goldproduktion;
      label13.caption:=floattostrf(Stein,fffixed,10,0);
      label14.caption:=floattostrf(luxusgueter,fffixed,10,0);
      label15.caption:=floattostrf(Nahrung,fffixed,10,0);
      label16.caption:=floattostrf(gold,fffixed,10,0);
      label17.caption:=inttostr(einwohner);
      i:=i+1;
      end;
  until i=100000000;
Das kann doch keiner am Bildschirmverfolgen..

Delphi-Quellcode:
  repeat
    begin
      Luxusgueter:=Luxusgueter+Luxusgueterproduktion;
      Stein:=Stein+Steinproduktion;
      Nahrung:=Nahrung+Nahrungproduktion;
      Gold:=Gold+Goldproduktion;
      i := i+1;
    end;
  until i = 100000000;
  label13.caption:=floattostrf(Stein,fffixed,10,0);
  label14.caption:=floattostrf(luxusgueter,fffixed,10,0);
  label15.caption:=floattostrf(Nahrung,fffixed,10,0);
  label16.caption:=floattostrf(gold,fffixed,10,0);
  label17.caption:=inttostr(einwohner);
und eigentlich könnte man das dann auch ohne Schleife bereichnen.

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:41 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz