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

时间:2022-03-24 00:55:35

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

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

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:不显示交集区域

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

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

创建新项目,游戏框架为 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);
}
}
}

【读书笔记《Android游戏编程之从零开始》】15.游戏开发基础(剪切区域)的更多相关文章

  1. Windows游戏编程之从零开始d

    Windows游戏编程之从零开始d I'm back~~恩,几个月不见,大家还好吗? 这段时间真的好多童鞋在博客里留言说或者发邮件说浅墨你回来继续更新博客吧. woxiangnifrr童鞋说每天都在来 ...

  2. Java并发编程的艺术读书笔记(2)-并发编程模型

    title: Java并发编程的艺术读书笔记(2)-并发编程模型 date: 2017-05-05 23:37:20 tags: ['多线程','并发'] categories: 读书笔记 --- 1 ...

  3. Java并发编程的艺术读书笔记(1)-并发编程的挑战

    title: Java并发编程的艺术读书笔记(1)-并发编程的挑战 date: 2017-05-03 23:28:45 tags: ['多线程','并发'] categories: 读书笔记 --- ...

  4. 读书笔记--Android Gradle权威指南(下)

    前言 最近看了一本书<Android Gradle 权威指南>,收获挺多,就想着来记录一些读书笔记,方便后续查阅. 本篇内容是基于上一篇:读书笔记--Android Gradle权威指南( ...

  5. 《Essential C&plus;&plus;》读书笔记 之 C&plus;&plus;编程基础

    <Essential C++>读书笔记 之 C++编程基础 2014-07-03 1.1 如何撰写C++程序 头文件 命名空间 1.2 对象的定义与初始化 1.3 撰写表达式 运算符的优先 ...

  6. 【读书笔记《Android游戏编程之从零开始》】18&period;游戏开发基础(碰撞检测)

    1.矩形碰撞 所谓矩形碰撞,就是利用两个矩形之间的位置关系来进行判断,如果矩形的像素在另外一个矩形之中,或者之上都可以认为这两个矩形发生了碰撞. 如果单纯的去考虑哪些情况会判定两个矩形发生碰撞,倒不如 ...

  7. 【读书笔记《Android游戏编程之从零开始》】19&period;游戏开发基础(游戏音乐与音效)

    在一款游戏中,除了华丽的界面 UI 直接吸引玩家外,另外重要的就是游戏的背景音乐与音效:合适的背景音乐以及精彩的音效搭配会令整个游戏上升一个档次. 在 Android 中.常用于播放游戏背景音乐的类是 ...

  8. 【读书笔记《Android游戏编程之从零开始》】12&period;游戏开发基础(Canvas 画布)

    1.Canvas 画布 画布类 Canvas 封装了图形和图片绘制等内容,此类常用的函数说明如下: drawColor(int color) 作用:绘制颜色覆盖画布,常用于刷屏 参数:颜色值,也可用十 ...

  9. 【读书笔记《Android游戏编程之从零开始》】16&period;游戏开发基础(动画)

    1. Animation动画   在Android 中,系统提供了动画类 Animation ,其中又分为四种动画效果: ● AlphaAnimation:透明度渐变动画 ● ScaleAnimati ...

随机推荐

  1. Xamarin for Visual Studio V3&period;11&period;431 于 2015&period;4&period;3-2015&period;4&period;17 最新发布&lpar;Win &amp&semi; Mac&rpar;

    Beta Release: April 3 edited April 17 in Visual Studio Released versions: Windows Xamarin.VisualStud ...

  2. node-glob学习

    node的glob模块允许你使用 *等符号, 来写一个glob规则,像在shell里一样,获取匹配对应规则的文件. 这个glob工具基于javascript.它使用了 minimatch 库来进行匹配 ...

  3. 复习(2)【postman&comma;charles&comma;filezilla server】

    Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件.通常我们可以用它来测试接口. Charles是在Mac下常用的网络封包截取工具,在做移动开发时,我们为了调试与服务器端的 ...

  4. POJ 题目2411 Mondriaan&&num;39&semi;s Dream(状压DP)

    Mondriaan's Dream Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 13519   Accepted: 787 ...

  5. 【ZOJ】3640 Help Me Escape

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=4808 题意:一个吸血鬼初始攻击力为f.n条路,他每次等概率选择一条路.如果攻击 ...

  6. Blackhat EU 2013 黑客大会(Full Schedule for Black Hat USA 2013)

    大会文档下载:https://www.blackhat.com/eu-13/archives.html 此次BH EU 议题整体较水,涉及系统安全.移动安全.网络传输安全.WEB安全.游戏安全等.下面 ...

  7. Bootstrap配套的js框架

    求几个搭配bootstrap的js框架.实现如表单验证,文件多传下载等等 Bootstrap File Input文件选择控件: PNotify通知插件: ClockPicker时间拾取器: Boot ...

  8. SQL查询性能分析之(not in)、(and not)、()、(&excl;&equals;)性能比较

    SQL查询性能分析之(not in).(and not).().(!=)性能比较 SQL Server Bruce 3年前 (2013-01-08) 3284浏览 0评论 <:article c ...

  9. 基于华为Java编程规范的Eclipse checkStyle&period;xml

    发现项目组成员代码规范存在较大的问题,于是就在华为编程规范的基础上制定了这份checkStyle.xml文档,至于Eclipse怎么安装checkStyle插件以及该插件怎么使用请自行Google之. ...

  10. &lbrack;转&rsqb;NHibernate之旅&lpar;4&rpar;:探索查询之条件查询&lpar;Criteria Query&rpar;

    本节内容 NHibernate中的查询方法 条件查询(Criteria Query) 1.创建ICriteria实例 2.结果集限制 3.结果集排序 4.一些说明 根据示例查询(Query By Ex ...