Ich habe eine Frage zum Thema Timer und Variablen…
Ich programmiere im Moment ein kleines Spiel, in welchem man Gebäude adden kann und dann jede Minute abhängig von der Anzahl der Gebäude Rohstoffe geaddet werden.
Beispiel:
Ich habe 3 Holzfäller und jeder Holzfäller produziert in der Minute 15 t Holz, also bekomme ich pro Minute 45 t Holz dazu. Wie kann ich das nun Codetechnisch umsetzen? Ich habe die Variablen
-Anzahl der Holzfäller
-Wieviel kommt in der Minute hinzu
-Wieviel Holz ist bereits vorhanden
gegeben.
Ich brauche den Code nun so, dass ich ihn auf mehrere Gebäudetypen ausweiten kann(Sägewerk, Bergwerk, Eisenmine usw.)
Ich würde das ganze folgendermaßen machen:
Zunächst solltest du dir einige Model-Klassen erstellen, die dir den aktuellen Spielstatus vorhalten (Ressourcenstände, Gebaute Gebäude, etc.). Dann würde ich einen Timer/Runnable laufen lassen, der sekündlich die Ressourcen aktualisiert. Das könnte so aussehen:
while (game.isRunning()) {
for (Resource res : Resources.getAll()) {
int increase = game.calculateIncreasePerSecond(res);
game.increaseResource(res, increase);
}
}
So, oder so ähnlich…
Oder ist deine Frage einfach nur wie du im Timer Zugriff auf andere Variablen hast? Die kannst du einfach im Konstruktor übergeben.
Ich habe im moment ein problem mit dem Timer, denn setze ich meinen Code in den button zum spielstart ein, so bleibt mein spielfenster transparent.
Könnten sie mir ihre Skype-Kontaktdaten geben?
Ich habe im moment ein problem mit dem Timer, denn setze ich meinen Code in den button zum spielstart ein, so bleibt mein spielfenster transparent.
Vermutlich blockierst du den EDT. Poste mal nen KSKB (wenn das nicht in hunderte von Codezeilen ausartet). Ansonsten vielleicht den Code des ActionListeners, in dem du den Timer startest.
Könnten sie mir ihre Skype-Kontaktdaten geben?
Ähm, nein Bei Fragen hilft man dir gerne hier im Forum.
Das Problem ist, dass sobald du nur einen Thread verwendest dieser natürlich auch derjenige ist, der für die Ansicht deines Spiels zuständig ist. Sobald du diesen ‘Hauptthread’ oder eben EDT für andere Berechnungen “missbrauchst” bleibt deine Anzeige stehen. Such mal nach “EDT Threads”, ist ein bekanntes Problem am Anfang.