Hallöchen,
ich programmiere gerade ein Spiel und wollte einen Timer erstellen. Nun habe ich allerdings ein Problem - hier mal der Quelltext:
Das aktualisieren geschieht in einem Thread.
Was da in addTime übergeben wird, wie oft der Timer aktualisiert wird und das es Millisekunden sind ist erstmal völlig egal.
Das Problem ist folgendes:
Die Zeit wird regelmäßig hochgezählt. Wenn jetzt allerdings "picross_button_mistake" ausgelöst wird, wird zwar der Wert draufaddiert, allerdings ist das Update beim nächsten "picross_refresh_timer" event wieder weg.
Es könnte also folgendermaßen aussehen:
0
500
1000
1500
> picross_button_mistake
101500
2000
2500
...
Jemand ne Idee, wie ich das Problem umgehen kann. Hatte es davor schon auf anderem Wege probiert, aber es kam das Gleiche raus.
Muss ich eventuell currentTime mit Semaphoren sperren?
Danke im Voraus - Tom
ich programmiere gerade ein Spiel und wollte einen Timer erstellen. Nun habe ich allerdings ein Problem - hier mal der Quelltext:
Code:
public class PicrossTimer extends Canvas implements PropertyChangeListener {
private long startTime;
private int currentTime;
// constructor
public PicrossTimer() {
startTime = Calendar.getInstance().getTimeInMillis();
}
// methods
public void paint(Graphics g) {
g.drawString("" + currentTime, 0, 10);
}
public void refreshTime() {
currentTime = (int)( Calendar.getInstance().getTimeInMillis() - startTime );
}
public void addTime(int value) {
currentTime += value;
}
public void propertyChange(PropertyChangeEvent event) {
if (event.getPropertyName().equals("picross_refresh_timer")) {
refreshTime();
repaint();
} else if (event.getPropertyName().equals("picross_button_mistake")) {
addTime(100000);
repaint();
}
// ...
// Canvas zeugs
}
Das aktualisieren geschieht in einem Thread.
Code:
public class PicrossTimerRefresh extends Thread {
private PropertyChangeSupport propChange;
// constructor
public PicrossTimerRefresh() {
propChange = new PropertyChangeSupport(this);
}
public void run() {
while (true) {
try {
Thread.sleep(500);
propChange.firePropertyChange("picross_refresh_timer", null, null);
} catch (InterruptedException e) {}
}
}
// ...
// listener adden und so...
Was da in addTime übergeben wird, wie oft der Timer aktualisiert wird und das es Millisekunden sind ist erstmal völlig egal.
Das Problem ist folgendes:
Die Zeit wird regelmäßig hochgezählt. Wenn jetzt allerdings "picross_button_mistake" ausgelöst wird, wird zwar der Wert draufaddiert, allerdings ist das Update beim nächsten "picross_refresh_timer" event wieder weg.
Es könnte also folgendermaßen aussehen:
0
500
1000
1500
> picross_button_mistake
101500
2000
2500
...
Jemand ne Idee, wie ich das Problem umgehen kann. Hatte es davor schon auf anderem Wege probiert, aber es kam das Gleiche raus.
Muss ich eventuell currentTime mit Semaphoren sperren?
Danke im Voraus - Tom