首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >补偿游戏逻辑更新带来的延迟

补偿游戏逻辑更新带来的延迟
EN

Stack Overflow用户
提问于 2010-08-24 23:46:18
回答 2查看 335关注 0票数 1

现在我有(1: UI-循环,我的SurfaceView被放置在那里),(2:第二个线程,从UI-循环调用绘制函数,并从我的引擎更新计算)和(3:引擎,所有的计算内容都在那里)。

现在我想知道如何最好和最流畅的方式做SurfaceView独立于实际的帧速率。如果存在低帧率,我该如何进行补偿?

我认为我目前的解决方案还不够,请参阅下面的代码。

线程类

代码语言:javascript
复制
//Constructor stuff....

int static delay = 0; /* My delay in milliseconds, depends most on
which sort of game I'm trying to make */
@Override
public void run() {
 while (state==RUNNING) {
       long beforeTime = System.nanoTime();
       engine.updateSprites(); //Update calculations from my engine

 //Rita
 Canvas c = null;
 try {     

       c = surfaceHolder.lockCanvas(null);
       synchronized (surfaceHolder) {
           view.myDraw(c);    //My draw function
     }
 } finally {
     if (c != null) {
         surfaceHolder.unlockCanvasAndPost(c);
     }
 }

 sleepTime = delay-((System.nanoTime()-beforeTime)/1000000); /* 1000000 because 
 of the nanoTime gives us the current timestamp in nanoseconds */

        try {
            if(sleepTime>0){
            Thread.sleep(sleepTime);          

            }
        } catch (InterruptedException ex) { 
        }

 }

这段代码是否足以保证独立于低帧率?如果不是,我该怎么做呢?

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-08-28 02:23:26

http://dewitters.koonsolo.com/gameloop.html

这是我所知道的最好的简短课程之一。它展示了3种不同的方法来做你正在寻找的事情。

票数 4
EN

Stack Overflow用户

发布于 2010-08-25 00:01:58

现在,我在这方面没有足够的经验来给你一个明确的答案,我相信很快就会有人来给你这个答案。然而,在此期间,我将提供我的想法:

因此,问题是如何确保SurfaceView看起来很好和平滑,而不管帧速率如何?

对于这样的事情,我认为一种常见的实现是使用double/mulitple buffering

这样,您就可以在背景中绘制框架,一旦框架准备就绪,就可以将新框架切换为旧框架。

假设你有两个画布A,B。

您向用户显示A,而在后台您正在准备B。当客户端请求新帧时,您可以向他们显示A,或者如果B准备就绪,您可以向他们显示B。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3558284

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档