在Java中将变量的值更改一定时间

Yas*_*ari 3 java time

我正在开发一个相当基本的2D Java游戏.我想知道是否有任何方法可以在一段时间内更改变量(例如布尔值或整数)?我想避免使用for循环,因为它们会在一段时间内完全冻结我的游戏.代码将是这样的:

if(certainAbilityIsActivatedThatTakes5Seconds){

  // for 5 seconds{

  player1.isBeingAffectedByTheAbilityThatTakes5Seconds = true; } 
Run Code Online (Sandbox Code Playgroud)

希望我说的是有道理的,也是可行的.任何帮助都会很棒.现在我已经设法找到了这样做的方法,但它依赖于每秒至少获得60帧.我将不得不想象这是一种伪劣的做法.任何帮助都会很棒.

Rob*_*sen 7

简单的解决方案,无需使用线程或计时器:而不是存储a boolean,存储long包含时间戳的时间戳,该时间戳指示能力何时被激活.

public class Ability {
      private static final int DURATION = 5000;

      private long activatedAt = Long.MAX_VALUE;

      public void activate() {
          activatedAt = System.currentTimeMillis();
      }

      public boolean isActive() {
          long activeFor = System.currentTimeMillis() - activatedAt;

          return activeFor >= 0 && activeFor <= DURATION;
      }
}
Run Code Online (Sandbox Code Playgroud)

  • 你的方法行不通。用 Long.MAX_VALUE 减去系统当前时间会给你一个负数,它总是小于你的持续时间。减去 Long.MIN_VALUE 将使您的数字溢出回负数,默认情况下再次为您提供 true。并且减去 0 不会是 100% 准确,因为有一个边缘情况,您的 (System.currentTimeMillis() - 0) 将 &lt;= 到您检查它时的持续时间。 (2认同)