【问题标题】:How to set something to happen after a certain amount of time?如何设置一定时间后发生的事情?
【发布时间】:2011-04-21 08:29:04
【问题描述】:

我现在正在为 Android 编写游戏,我遇到了一个问题,即当我与敌人发生碰撞时,我的生命值条会快速向下射击。

我想让它每秒只记录两次点击。截至目前,它似乎在 1-2 秒内完成了 50 帧动画。

请告诉我如何解决我的问题。

谢谢!

【问题讨论】:

    标签: java android timer


    【解决方案1】:

    如何存储上次碰撞发生在您的播放器对象中的时间戳,并在检测到碰撞时将当前时间与它进行比较?如果时间过长,则减少健康。这样您就不会受到可能的帧速率波动的限制。

    【讨论】:

    • 这解决了我的问题,其他答案都很棒。我发现这是最快的解决方案......也许不是最好的?我建议向正在寻找的人阅读所有这些答案。
    • Skalli 在下面定义了我这样做的方式。使用当前时间戳以及 FPS 和计时器。
    【解决方案2】:

    在一定时间后运行某些东西的最佳解决方案是使用TimerTask。例如,此代码在 2011 年 12 月 31 日运行。

    Timer timer = new Timer();
    timer.schedule(new TimerTask( 
    
    public void run() {
    
        System.out.println("done");
    
    }),
    
    new Date(2011, 12, 31));
    

    【讨论】:

    • 这不是打开另一个线程并使用更多资源吗?移动编程效率低吗?
    【解决方案3】:

    将作业放入AsyncTask,其中doInBackground() 方法正在倒计时,发送进度更新,然后休眠一小段时间。

    伪代码:

    doInBackground(int howMuch) {
       while (howMuch > 0 ) {
           publishProgress(howMuch);
           Thread.sleep(1000 / howMuch);
      } 
    }
    
    onProgressUpdate(int current) {
         updateProgressBar(current);
    }
    

    【讨论】:

      【解决方案4】:

      制作 Runnable 并使其在触发时将无敌标志翻转为 false 甚至可能更简单。

      mHandler = new Handler() (during onCreate)
      notInvincible = true;
      
      -- get damaged --
      if(damaged && notInvincible ){
        notInvincible = false;
        mHandler.postDelayed(new Runnable(){ void run() { notInvincible = true; }},DELAYTIME);
      }
      

      但 AsyncTask 也可以让你这样做。

      【讨论】:

        【解决方案5】:

        执行此类操作的常用方法是计算帧时间(自上一帧以来的时间)。有了这段时间,您可以使所有动作都依赖于时间,还可以处理这些计时器之类的东西。
        对于这样的碰撞,您需要为您的玩家类添加一个属性,其中包含自上次命中以来的时间。每一帧,此属性都会与帧时间相加。然后,您可以检查自上次碰撞以来的时间。击中后,您可以将计时器设置回零。不涉及线程。

        【讨论】:

        • Perect.. 这实际上是我处理时间戳答案的方式.. 非常感谢!
        • 是的,确实几乎一样,只是方法略有不同。 :)
        猜你喜欢
        • 1970-01-01
        • 2011-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多