显示界面类--GameView

    •  package com.bn.box2d.bheap;                             //声明包  
    •    import android.graphics.Canvas;                             //导入相关类  
    •    ......//该处省略了部分导入相关类的代码,读者可以自行查阅随书光盘的源代码  
    •    import android.view.SurfaceView;                            //导入相关类  
    •    public class GameView extends SurfaceView   
    •    implements SurfaceHolder.Callback{                          //创建类  
    •        MyBox2dActivity activity;                               //成员变量  
    •        Paint paint;                                        //画笔  
    •        DrawThread dt;                                      //绘制线程    
    •       public GameView(MyBox2dActivity activity){              //构造器  
    •           super(activity);                                //调用父类  
    •           this.activity = activity;                           //初始化成员变量  
    •           this.getHolder().addCallback(this);     //设置生命周期回调接口的实现者  
    •           paint = new Paint();                                //创建画笔  
    •           paint.setAntiAlias(true);                           //打开抗锯齿  
    •           dt=new DrawThread(this);                            //创建线程对象  
    •           dt.start();                                 //开启线程  
    •       }   
    •       public void onDraw(Canvas canvas){                      //绘制方法  
    •           if(canvas==null){                               //判断canvas是否为空  
    •               return;                                 //canvas为空则返回  
    •          }  
    •           canvas.drawARGB(255,255, 255, 255);             //设置背景颜色  
    •          for(MyBody mb:activity.bl){                     //绘制场景中的物体  
    •               mb.drawSelf(canvas, paint);                 //绘制球与木块金字塔  
    •       } }  
    •       public void surfaceChanged(SurfaceHolder arg0,int arg1,int arg2,int arg3){ }  
    •       public void surfaceCreated(SurfaceHolder holder) { repaint(); }                                           //创建时被调用  
    •       public void surfaceDestroyed(SurfaceHolder arg0){ }     //销毁时被调用  
    •       public void repaint(){                                        
    •           SurfaceHolder holder=this.getHolder();            //得到回调接口的对象  
    •           Canvas canvas = holder.lockCanvas();                //获取画布  
    •           try{                                                  
    •              synchronized(holder){                       //同步处理  
    •                  onDraw(canvas);                         //绘制  
    •           } }catch(Exception e){                          //捕获异常  
    •               e.printStackTrace();                            //打印堆栈信息  
    •           }finally{                                         
    •               if(canvas != null){                        //判断canvas是否为空  
    •                   holder.unlockCanvasAndPost(canvas);     //解锁  
    •   } } } }  

第10-18行为该类的构造器,在该类的构造器中主要是初始化成员变量,同时创建画笔,打开抗锯齿,创建DrawThread类对象,并开启线程。

第19-26行为绘制方法。首先判断canvas是否为空,如果为空,则返回。然后设置背景颜色为白色。最后再绘制本案例中的球以及木块金字塔。

第27-29行为创建实现回调接口的类必须重写的3个方法。

第30-41行为刷帧方法,首先获得SurfaceHolder的对象,并获取画布,然后使用同步控制绘制方法,最后如果画布不为空,则需要为画布解锁。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值