2012-10-11 57 views
0

我使用这个类来更新渲染视图的RenderView的速度控制问题的Android,在游戏

public class AndroidFastRenderView extends SurfaceView implements Runnable { 
    AndroidGame game; 
    Bitmap framebuffer; 
    Thread renderThread = null; 
    SurfaceHolder holder; 
    float speedRegulator= 100000009.9f; 
    volatile boolean running = false; 

    public AndroidFastRenderView(AndroidGame game, Bitmap framebuffer) { 
     super(game); 
     this.game = game; 
     this.framebuffer = framebuffer; 
     this.holder = getHolder(); 
    } 

    public void resume() { 
     running = true; 
     renderThread = new Thread(this); 
     renderThread.start();   
    }  

    public void run() { 
     Rect dstRect = new Rect(); 
     long startTime = System.nanoTime(); 
     while(running) { 
      if(!holder.getSurface().isValid()) 
       continue;   

      float deltaTime = (System.nanoTime()-startTime) /speedRegulator; 
      startTime = System.nanoTime(); 

      game.getCurrentScreen().update(deltaTime); 
      game.getCurrentScreen().present(deltaTime); 

      Canvas canvas = holder.lockCanvas(); 
      canvas.getClipBounds(dstRect); 
      canvas.drawBitmap(framebuffer, null, dstRect, null);       
      holder.unlockCanvasAndPost(canvas); 
     } 
    } 

    public void pause() {       
     running = false;       
     while(true) { 
      try { 
       renderThread.join(); 
       break; 
      } catch (InterruptedException e) { 
       // retry 
      } 
     } 
    }   
} 

数量:

float speedRegulator= 100000009.9f; 

是让我减少和增加的参数球员的速度,不幸的是,如果我设置这个浮动speedRegulator= 1000000000.0f;是太慢了,如果离开float speedRegulator= 100000009.9f;太快。

我该如何解决这个问题?为什么速度变化不是渐进的?

回答

0

这不是一个渐变,因为1000000000.0f大约是100000009.9f的十倍。如果你试图让它快一点(比如说10%),可以尝试一下900000000

+0

尚未尝试但遇到同样的问题 – AndreaF