【发布时间】:2014-04-20 18:23:59
【问题描述】:
嗨,我一直在尝试为我的 libgdx 游戏制作一个简单的 10 秒倒计时计时器,但我一直遇到问题。我现在在实现可运行的单独类中运行倒数计时器。这个类工作得很好,它按计划倒计时,我在这个线程中运行了一个 system.out.println 来验证它是否工作。问题是在我的主游戏屏幕中打印/绘制此计时器变量。
如果我尝试从我的游戏屏幕上打印这个变量,我会得到它的起始变量,即十,而不是不断更新的一个(从十开始倒数)。我什至使用了 getter 方法,但仍然没有运气。任何想法如何实现这一目标?谢谢
我假设这是因为线程与主游戏并行运行?
public class timekeep implements Runnable {
public Boolean TimerRunning=true;
private int Timer = 10; //need to print this from my main game screen as it changes
public void run() {
while(TimerRunning == true) {
System.out.println("Time left "+ Timer);//works perfectly prints countdown
//run code
//subtracts 1 from Timer every second
}
}
public int gettime(){
return Timer;//returns timer
}
}
....
//accessing Timer variable from main game
System.out.println(Timekeep.gettime());//prints 10 all the time in the main screen
【问题讨论】:
-
你的例子很不完整。我们看不到 TimeKeep.gettime 方法。我也没有看到 Timer 被改变的任何地方。所以它没有改变也就不足为奇了。
-
我认为没有必要发布我的整个线程类,我想让我的代码尽可能简单和相关。我的线程类工作只是因为我无法从我的主游戏中访问不断更新的变量 Timer。它总是从那里输出 10。当线程运行时,它每秒从 Timer 中减去 1,我发现这在我的 Thread system.out.println 中运行良好,但不是我的主游戏。
-
大概你只有一个类 timeKeep 的对象,你用它来初始化一个新线程,然后启动它。您的课程不是线程安全的。我建议您将
TimerRunning和Timer声明为volatile或通过同步保护它们。这可能无法解决您的问题,但确保您的课程线程安全不会有什么坏处。 -
谢谢,我去看看
-
我将 TimerRunning 和 Timer 变量设置为 volatile,但仍然没有运气。
标签: java android multithreading libgdx