Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/202.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
Android开发:Thread.sleep只是放慢了游戏的速度_Android_2d_Sleep_Frame Rate_Thread Sleep - Fatal编程技术网

Android开发:Thread.sleep只是放慢了游戏的速度

Android开发:Thread.sleep只是放慢了游戏的速度,android,2d,sleep,frame-rate,thread-sleep,Android,2d,Sleep,Frame Rate,Thread Sleep,我有一个: @Override public boolean onTouchEvent(MotionEvent event) { synchronized (event) { try { Thread.sleep(16); } catch (InterruptedException e) { e.printStackTrace(); }

我有一个:

@Override
    public boolean onTouchEvent(MotionEvent event) {
        synchronized (event)  
        {  

        try {
            Thread.sleep(16);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        if(event.getAction() == MotionEvent.ACTION_DOWN){

          isDown = true;
        }else if(event.getAction() == MotionEvent.ACTION_MOVE){

          isDown = true;
        }else if(event.getAction() == MotionEvent.ACTION_UP){

         isDown = false;
        }

        return true;
        } 

    }
然后在我的
main游戏线程中使用
setCharacterPosition()

但这让我的角色跑得太快了,所以我尝试添加:

Thread.sleep(500);
因为我只希望我的角色每半秒增加32

它的工作,但使我的FPS下降到2-3

我怎么做才对


//Simon

我对Java或Android知之甚少,但这似乎是一种错误的做法

你所追求的是建立一个游戏循环(一个持续运行并逐帧更新游戏逻辑的循环)

此循环以定时间隔执行(通常每秒60帧,在移动平台上可能更少)

在每一帧上,您可以根据自上一帧以来经过的时间缩放游戏对象的移动

这提供了一个缩放的移动,与您正在使用的设备的时钟速度无关

阅读这些优秀资源中的更多abot游戏循环:


Android UI基于单线程模型,因此不要阻止UI线程。您的onTouchEvent在UI线程中执行…当您调用Thread.sleep时,您正在使您的UI线程在特定的时间段内处于睡眠状态


希望这有帮助。Ref:

要添加一个简单的示例。。。角色每秒移动10像素。。。自上一帧0.005s起的时间。CharacterX+=10*0.005fWell基本上我增加了32,因为我有一个网格,我的角色不应该站在一条线的中间为什么不减少你正在使用的增量值(即低于32的值可能是5)?
Thread.sleep(500);