• 【读书笔记《Android游戏编程之从零开始》】15.游戏开发基础(剪切区域)


    剪切区域也称为可视区域,是由画布进行设置的;它指的是在画布上设置一块区域,当画布一旦设置了可视区域,那么除此区域外,绘制的任何内容都将看不到;可视区域可以是圆形、矩形等等。

     画布提供了三种设置可视区域的方法。

    1.通过坐标,设置矩形可视区域
    clipRect(int left,int top,int right,int bottom)
    作用:为画布设置矩形可视区域
    第一、二个参数:为可视区域的左上角
    第三、四个参数:为可视区域的右下角

    2.利用 Path 来设置可视区域的形状
    clipPath(Path path)
    作用:为画布设置可视区域
    参数:Path实例

    3.利用 Region 来对画布设置可视区域
    clipRegion(Region region)
    作用:为画布设置可视区域
    参数:Region 实例

    Region 表示区域的集合,所以它可以设置多个区域块,而且可以通过这些区域块之间的关系来处理一些问题;比如 Region 设置它所有区域块相交的区域是否可见、设置相交区域只让交集显示等等。

    Region 常用函数:
    op(Rect rect,Op op)
    作用:设置区域块
    第一个参数:Rect 实例
    第二个参数:Region.Op 静态值,表示区域块的显示方式。其中区域块的显示方式如下:
    Region.Op.UNION: 区域全部显示
    Region.Op.INTERSECT:区域的交集显示
    Region.Op.XOR:不显示交集区域


    下面是实例演示,效果图如下:

    创建新项目,游戏框架为 SurfaceView 游戏框架。具体步骤参照“11.游戏开发基础(SurfaceView 游戏框架、View 和 SurfaceView 的区别)”。

    修改 MySurfaceView 类中的绘图函数如下:

        private void myDraw() {
            try {
                canvas = sfh.lockCanvas();
                if (canvas != null) {    
                    //通过图片资源生成一张Bitmap 位图
                    Bitmap bmp = BitmapFactory.decodeResource(this.getResources(), R.drawable.pic01);
                    
                    canvas.save();
                    canvas.drawText("原图:", 20, 20, paint);
                    canvas.drawBitmap(bmp, 20, 30,paint);
                    canvas.restore();
                    
                    canvas.save();
                    canvas.drawText("通过坐标,设置矩形可视区域:", 20, 320, paint);
                    /**
                     * 为画布设置矩形可视区域
                     * 第一、二个参数为可视区域的左上角
                     * 第三、四个参数为可视区域的右下角
                     */
                    canvas.clipRect(20,330,bmp.getWidth()+20,bmp.getHeight()/2+330);
                    canvas.drawBitmap(bmp, 20, 330,paint);
                    canvas.restore();
                    
                    canvas.save();
                    canvas.drawText("利用 Path 来设置可视区域的形状,这里为圆形可视区域:", 20, 620, paint);
                    Path path = new Path();
                    path.addCircle(20+bmp.getWidth()/2, 630+bmp.getHeight()/2, bmp.getWidth()/2, Direction.CCW);
                    /**
                     * 为画布设置可视区域
                     * 参数:Path实例
                     * 利用Paht 可以为位图设置任何需要的可视区域,这里是设置一个圆形可视区域。
                     */
                    canvas.clipPath(path);
                    canvas.drawBitmap(bmp, 20, 630, paint);
                    canvas.restore();
                    
                    canvas.save();
                    canvas.drawText("利用 Region 来对画布设置可视区域:", 20, 920, paint);
                    Region region = new Region();
                    //区域块全部显示
                    region.op(new Rect(20,930,120,1030), Region.Op.UNION);
                    //不显示交集区域
                    region.op(new Rect(50,930,100,1080), Region.Op.XOR);
                    canvas.clipRegion(region);
                    canvas.drawBitmap(bmp, 20, 930, paint);
                    canvas.restore();
                    }
            } catch (Exception e) {
            } finally {
                if (canvas != null) {
                    sfh.unlockCanvasAndPost(canvas);
                }
            }
        }
  • 相关阅读:
    cocos2dx打包apk
    cocos2d 小游戏
    排序算法笔记二
    把一张合成图分拆出各个小图
    出栈入栈动画demo
    Android 面試題
    AS项目删减打包-01
    c程序指针题
    ubuntu14.04 设置默认登录用户为root
    Ubuntu14.04 Java环境变量配置
  • 原文地址:https://www.cnblogs.com/yc-755909659/p/4164979.html
Copyright © 2020-2023  润新知