显示界面类--GameView

本文介绍了一个基于Box2D的游戏视图绘制类GameView的实现细节,包括构造器、绘制方法及SurfaceHolder.Callback接口的实现。通过创建画笔、开启绘制线程并设置背景颜色来完成基本的视图绘制。
    •  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的对象,并获取画布,然后使用同步控制绘制方法,最后如果画布不为空,则需要为画布解锁。


//C/C++: // -------------------- 数据设计 -------------------- /* 棋盘: board[i][j]表示坐标(i,j)的值 0表示空地 1表示黑子 2表示白子 如: board[3][6] = 1 表示(3,6)的位置是黑子 */ int board[19][19]; // 表示当前回合数 偶数表示黑棋落子 奇数表示白棋落子 // 如: flag = 20 表示当前是第[20]次落子 由黑方落子 int flag; // -------------------- 数据设计 -------------------- // -------------------- service -------------------- /* 负责人: 张三 功能: init: 初始化游戏数据 将棋盘的值初始化为0 当前回合设为黑棋(flag设为0) 参数: void 返回值: void */ void init(); /* *难点1 负责人: 张三 功能: isWin: 根据传入的坐标(board对应位置)和flag值 判断落点后是否获胜 参数: x: 当前回合落子的x坐标 y: 当前回合落子的y坐标 返回值: 0表示没有获胜 1表示黑子胜利 2表示白子胜利 */ int isWin(int x, int y); /* 负责人: 张三 功能: playerMove: 在指定位置落子 如果board[x][y]是空地 则修改board[x][y]的值:改为相应颜色(flag对应颜色) 否则不操作 参数: x: 当前回合落子的x坐标 y: 当前回合落子的y坐标 返回值: 0表示落子失败 (棋盘已经有子) 1表示落子成功 */ int playerMove(int x, int y); // -------------------- service -------------------- // -------------------- view -------------------- /* 负责人: 张三 功能: menuView: 展示选项, 玩家可以在这里选择进入游戏, 进入设置或退出游戏 while(1){ 1. 展示选项 2. 用户输入 3. 根据输入进行对应处理 进入游戏: 调用游戏界面函数gameView(); 进入设置: 打印敬请期待... 重新循环 退出游戏: 调用exit(0); } 参数: void 返回值: void */ void menuView(); /* 负责人: 张三 功能: gameView_ShowBoard: 根据board数组 打印游戏棋盘 参数: void 返回值: void */ void gameView_ShowBoard(); /* 负责人: 张三 功能: winView: 根据flag的值 打印游戏胜利界面 用户可以按任意键(使用getch函数)退出当前界面 参数: void 返回值: void */ void winView(); /* *难点2 负责人: 张三 功能: gameView: 游戏界面整合 初始化游戏数据(调用函数init()) while(1){ 打印游戏界面(调用函数gameView_ShowBoard()) 接收玩家坐标输入 落子(调用落子函数playerMove()) (如果落子失败 重新开始循环) 判断游戏是否胜利(调用胜利判断函数isWin()) (如果游戏胜利 调用胜利界面函数 然后结束当前界面) 切换玩家(修改flag值) } 参数: void 返回值: void */ void gameView(); // -------------------- view -------------------- int main() { menuView(); return 0; } void init() { //在此处完成代码 } int isWin(int x, int y) { //在此处完成代码 return 0; } int playerMove(int x, int y) { //在此处完成代码 } void menuView() { //在此处完成代码 } void gameView_ShowBoard() { //在此处完成代码 } void winView() { //在此处完成代码 } void gameView() { //在此处完成代码 }
最新发布
08-28
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值