【问题标题】:How to change variable every x second without stopping the program in Java?如何在不停止 Java 程序的情况下每 x 秒更改一次变量?
【发布时间】:2016-05-04 16:00:17
【问题描述】:

我是新来的,就像一周前一样,我开始学习编程,并且正在开发我的基于文本的战略游戏,我想让资源每隔 x 秒被动地收集一次。

我的游戏基本上是基于 while (true) 循环,其中是 switch case,游戏一直等待按键来收集资源。

我希望游戏每 x 秒被动收集一次资源。

示例:每 10 秒您将获得 +1 木材。

我会欢迎你的帮助 :) 使用 NetBeansIDE 在 java 中进行 Iam 编程

【问题讨论】:

    标签: java console


    【解决方案1】:

    使用this 获取每个循环运行的当前时间 并检查自上次你给 +1 木材以来是否经过了 10 秒。 注意时间单位。

    【讨论】:

      【解决方案2】:

      我不确定你是如何存储收集到的资源的,但是你是否可以调用一个方法来根据游戏开始的时间来查找它。您可以将以下变量存储为游戏类的一部分:

      private long startTime = System.currentTimeMillis();
      

      然后通过以下方法获取当前资源:

      public int getWood() {
          long diffMilliseconds = System.currentTimeMillis() - startTime;
          int numSeconds = (int)diffMilliseconds / 1000;
          int amtWood = numSeconds/10;
          return amtWood + <any other wood gathering/calculating parameters>;
      }
      

      这不考虑使用您的木材。如果您希望变量每十秒更新一次,您可以在此处使用类似解决方案的方法:Print "hello world" every X seconds。此解决方案使用 TimeTask 类。您可以更新 amtWood 变量,而不是打印。

      【讨论】:

      • 谢谢,我检查了你的链接,这段代码可以按我的意愿工作,问题是如果我使用 wood = wood + 1;而不是 system.out.Println .. 它说从内部类引用的局部变量必须是 final 或有效 final ,也许问题是我的资源存储为整数?类 SayHello 扩展 TimerTask { public void run() { System.out.println("Hello World!"); } } // 而从你的 main() 方法或任何其他方法 Timer timer = new Timer(); timer.schedule(new SayHello(), 0, 5000);
      • 不要把木头变成局部变量,把它变成实例或类变量。您可以声明私有 int wood;在你的班级声明下。
      【解决方案3】:

      如果对可以使用的类没有限制,请尝试作为 Java Swing 一部分提供的 Timer 类。您还可以查看 java.util.Timer 课程以安排您的更新。

      【讨论】:

        猜你喜欢
        • 2016-09-02
        • 1970-01-01
        • 2020-02-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-03-18
        相关资源
        最近更新 更多