Android游戏开发学习①弹跳小球实现方法

2019-12-10 20:00:03于海丽

因为bitmapArray数组中的图片分为大尺寸和小尺寸,为了绘制图片时,小尺寸图片不会被挡住,所以先使用大尺寸图片。

doDraw方法会在DrawThread中调用,用于绘制图片和帧速率。

4.绘制线程DrawThread类

DrawThread类:

 

 
  1. package com.ball;   import android.graphics.Canvas;  
  2. import android.view.SurfaceHolder;   public class DrawThread extends Thread {  
  3. BallView bv;   SurfaceHolder surfaceHolder;  
  4. boolean flag=false;   int sleepSpan=30;  
  5. long start =System.nanoTime(); //记录起始时间,该变量用于计算帧速率   int count=0 ; //记录帧数  
  6. public DrawThread(BallView bv,SurfaceHolder surfaceHolder) {   this.bv=bv;  
  7. this.surfaceHolder=surfaceHolder;   this.flag=true;  
  8. }   public void run() {  
  9. Canvas canvas=null;   while(flag) {  
  10. try {   canvas=surfaceHolder.lockCanvas(null); //获取BallView的画布  
  11. synchronized (surfaceHolder) {   bv.doDraw(canvas);  
  12. }   } catch (Exception e) {  
  13. e.printStackTrace();   } finally {  
  14. if(canvas!=null) {   surfaceHolder.unlockCanvasAndPost(canvas); // surfaceHolder解锁,并将画布传回  
  15. }   }  
  16. this.count++;   if(count==20) { //计满20帧时计算一次帧速率  
  17. count=0;   long tempStamp=System.nanoTime();  
  18. long span=tempStamp-start;   start=tempStamp;  
  19. double fps=Math.round(100000000000.0/span*20)/100.0;   bv.fps="FPS:"+fps;  
  20. }   try {  
  21. Thread.sleep(sleepSpan);   } catch (InterruptedException e) {  
  22. e.printStackTrace();   }  
  23. }   }