我正在编写一个脚本,只要它们在物品/怪物/熔岩的范围内,就会使玩家HP以一定的间隔减少。我的检测很好,但我似乎无法让间隔运行。我知道这可能是因为我在渲染时创建了一个新的TimerTask,但我似乎无法弄明白。
for(Monster monster : monsters) {
renderer.processEntity(monster);
if(player.withinDistance(10, monster.getPosition()))
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
System.out.println("tick");
Player.PLAYER_HEALTH -= 10;
}
}, 2000, 2000);
}
因此,对于所有怪物,它会检查位置,如果你在附近它会打开一个计时器任务,该任务应该在该条件为真时每2秒进行一次。我怎样才能正常工作?计时器任务是否适用于这种情况?
答案 0 :(得分:0)
此处的问题是您正在更新播放器类的PLAYER_HEALTH
静态属性。您应该更新播放器实例!
for(Monster monster : monsters) {
renderer.processEntity(monster);
if(player.withinDistance(10, monster.getPosition()))
timer.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
System.out.println("tick");
player.decreaseHealth(10); // Use the instance
}
}, 2000, 2000);
}
此外,如果您的程序结束,TimerTask也将结束。确保您的程序仍在运行。