1

我有一个:

@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 个。

它可以工作,但将我的 FPS 降低到 2-3。

我该怎么做?

//西蒙

4

2 回答 2

3

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

您所追求的是设置一个游戏循环(一个连续运行并逐帧更新游戏逻辑的循环)。

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

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

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

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

简单的 Java Android 游戏循环

游戏循环

Android 游戏循环

于 2011-07-14T20:45:31.817 回答
0

Android UI 基于单线程模型,所以不要阻塞 UI 线程。您的 onTouchEvent 在 UI 线程中执行...当您调用 Thread.sleep 时,您正在使您的 UI 线程在特定时间段内休眠。

希望这有帮助。参考:无痛穿线

于 2011-07-14T20:52:30.303 回答