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

发布于 2024-11-24 02:55:55 字数 938 浏览 6 评论 0原文

我有一个:

@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 线程 中我使用 setCharacterPosition();

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

但这使我的角色运行得太快,所以我尝试添加:

Thread.sleep(500);

因为我只想要我的角色每半秒增加 32。

它有效,但将我的 FPS 降低到 2-3。

我怎样做才正确?

//西蒙

I have a:

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

    }

Then in my MainGame thread I use setCharacterPosition();

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

but this make my Character to run toooo quickly so i tried to add:

Thread.sleep(500);

Because i only want my character to increase with 32 every half a sencond.

IT works but bring my FPS down to 2-3.

How do i do it right?

//Simon

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

一梦等七年七年为一梦 2024-12-01 02:55:57

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

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

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

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

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

在这些优质资源中阅读有关机器人游戏循环的更多信息:

简单的 Java Android 游戏循环

游戏循环

Android 游戏循环

I know little about Java or Android, but this seems like a wrong way to do it.

What you're after is setting up a Game Loop (a loop that continuously runs and updates the game logic, frame by frame).

This loop is executed on timed intervals (usually 60 frames per second, or maybe less on a mobile platform).

On each frame, you can scale the game object's movements based on the time elapsed since last frame.

This gives a scaled movement, irrelevant to the clock speed of the device you're using.

Read more abot game loops in these fine resources:

Simple Java Android Game Loop

Game Loop

Android Game Loop

空城仅有旧梦在 2024-12-01 02:55:57

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

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

Android UI is based on Single Thread Model, so do not block UI Thread. Your onTouchEvent executes in UI Thread...when you call Thread.sleep you are making your UI thread to sleep for that specific period of time.

Hope this help. Ref: Painless Threading

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文