计时器刻度事件未运行

时间:2015-01-13 05:06:00

标签: java timer task render lwjgl

我正在编写一个脚本,只要它们在物品/怪物/熔岩的范围内,就会使玩家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秒进行一次。我怎样才能正常工作?计时器任务是否适用于这种情况?

1 个答案:

答案 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也将结束。确保您的程序仍在运行。