【问题标题】:Timer tick event not running计时器滴答事件未运行
【发布时间】:2015-01-13 05:05:59
【问题描述】:

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

【问题讨论】:

    标签: java timer task render lwjgl


    【解决方案1】:

    这里的问题是您正在更新Player 类 的PLAYER_HEALTH 静态属性。您应该更新 Player 实例!

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

    【讨论】:

    • 谢谢,这有帮助,可能是一个问题,但我的“tick”一开始没有显示,所以我认为它必须与循环循环的方式有关。这个函数在我的主游戏循环中
    • 我应该存储诸如玩家健康、位置、金钱、法力、经验和静态引用之类的属性吗?还是应该只是我每次打开程序时设置并保存的普通全局变量?你
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-03
    • 1970-01-01
    • 2021-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多