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

时间:2011-07-14 20:33:55

标签: android 2d sleep frame-rate thread-sleep

我有一个:

@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;
        } 

    }

然后在我的MainGame thread我使用setCharacterPosition();

 public void setCharacterPosition(){
    if(isDown){
CharacterX += 32;
}
    }

但是这让我的角色太快了,所以我试着添加:

Thread.sleep(500);

因为我只希望我的角色每半秒增加32点。

IT可行,但我的FPS降至2-3。

我该怎么做?

//西蒙

2 个答案:

答案 0 :(得分:3)

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

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

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

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

这会产生缩放的移动,与您正在使用的设备的时钟速度无关。

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

Simple Java Android Game Loop

Game Loop

Android Game Loop

答案 1 :(得分:0)

Android UI基于单线程模型,因此请勿阻止UI线程。你的onTouchEvent在UI线程中执行...当你调用Thread.sleep时,你正在让你的UI线程在特定的时间段内休眠。

希望这有帮助。参考:Painless Threading