【问题标题】:Game Timer Damage Delay游戏计时器损坏延迟
【发布时间】:2013-03-11 15:37:57
【问题描述】:

我和我的一个朋友正在开发一款游戏,基本上,我们设置了一个碰撞箱,如果我们的角色(蜘蛛)击中它,角色就会失去生命值。

因为我们使用了 for 循环,所以不可避免的会发生,玩家 1 个 1 个失去生命值,但速度如此之快,人眼看不到。因此,我们需要为玩家每 x 次击中蜘蛛设置一个计时器、暂停或其他东西。这是我们的代码:

        if (ResetEntities.spiderObj.intersects(ResetEntities.blueCharacterObj)) {
        try {
            Thread.sleep(10);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        for (int i = 0; i < 100; i++) {
            if (ResetEntities.blueHealth < 0) {
                ResetEntities.blueHealth = 0;
                Frame.blueHealthLabel.setText("Health: "
                        + ResetEntities.blueHealth);
            } else {
                ResetEntities.getBlueHealth(ResetEntities.blueHealth - 1);
                Frame.blueHealthLabel.setText("Health: "
                        + ResetEntities.blueHealth);
            }
        }
    }

在这段代码中,我们有一个 if 语句来检查交集。我试图让脚本休眠,(我意识到 10 的速度非常快,但 1000 的滞后非常可怕,所以Thread#sleep 不是我想的要走的路)。然后我们有一个 for 语句运行 100 次(作为球员的健康)。然后我们有一个 if 查看生命值是否低于 0,设置回 0,这样玩家就不会得到负生命值。如果它不低于 0,我们执行 else 并减去 1 生命值。但正如我所说,这运行得太快了。

有什么帮助吗?

【问题讨论】:

  • 您的代码是一种方法。尝试睡眠 100L 到 200L 毫秒。
  • 如果您想在Java 游戏中设置Timer,我建议您使用javax.swing.Timer 而不是Thread

标签: java multithreading swing timer


【解决方案1】:

传统的方法——在我看来最好的方法——是让受伤的角色在特定时间点之前无懈可击:当角色受伤时,检查游戏时间线(或者如果你没有然后是当前的毫秒计数)然后添加一个特定的时间,例如 1 秒(或与字符相关的恢复时间)并记住字符对象中的时间戳。想要伤害角色的游戏棒首先检查角色是否仍然处于隐藏的无敌状态。这特别好,因为通常人们并不真正希望多个线程更新游戏状态。

【讨论】:

    【解决方案2】:

    使用Timer 作为后台进程的计时。并使用 javax.swing.SwingUtilities.invokeLater(Runnable) 更新您的 GUI。

    【讨论】:

      【解决方案3】:

      这个问题还不清楚,但您是在问如何才能阻止健康状况如此迅速地下降?如果是这样,我会这样做:

      您应该有一个 int 值 invincibilityTime 并在玩家被击中时将其设置为 100,然后每次您的游戏通过 gameloop 时都会将其减一。将if(invincibilityTime &lt;= 0) 放在(ResetEntities.spiderObj.intersects(ResetEntities.blueCharacterObj)) 之前,检查是否已过期。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-12-22
        • 2019-10-09
        • 1970-01-01
        • 2013-10-23
        • 2011-11-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多