Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何记录时间(让玩家忽略伤害3秒)?_Java - Fatal编程技术网

Java 如何记录时间(让玩家忽略伤害3秒)?

Java 如何记录时间(让玩家忽略伤害3秒)?,java,Java,我有一些代码如下所示: if there is a collision between player and enemy player.health-- 我想这样做: if there is a collision between player and enemy player.health-- wait for 3 seconds 这是为了忽略一点碰撞,这样玩家的生命值不会立即下降到0 我该如何实现某种计时器呢 要不冻结移动,您必须启动一个新线程,如下所示 priv

我有一些代码如下所示:

if there is a collision between player and enemy
    player.health--
我想这样做:

if there is a collision between player and enemy
    player.health--
    wait for 3 seconds
这是为了忽略一点碰撞,这样玩家的生命值不会立即下降到0


我该如何实现某种计时器呢

要不冻结移动,您必须启动一个新线程,如下所示

private Thread invul;

if(collision && (invul==null || !invul.isAlive())){
    player.health--;
    invul=new Thread(){
        public void run(){
            Thread.sleep(3000);
        }
    };
    invul.start();
}

或者更简单一些,节省玩家被击中的时间

private long lastTimeHit= 0;

if(collision && System.currentTimeMillis() > lastTimeHit+3000){
    lastTimeHit= System.currentTimeMillis();
    player.health--;
}

Thread.sleep(3000)
是一个选项。第一个解决方案还允许添加一些动画:
public void run(){player.blinking=true;Thread.sleep(3000);我不认为旋转线程来实现这一点是最佳的解决方案。我个人会做一些类似于
player的事情。在存储时间之前不会受到伤害。这也可以解释为一种视觉提示。