一,概括:

乍一看,可能感觉是一个矩形类,矩形类就是画一个长方形吗??这是我一开始见到这个类的感觉。

其实不是的Rectangle是一个“区域”类,它的最大作用就是定义一个矩形的区域,如果问为什么是矩形,不是圆形,三角形···Anyway···因为从程序的角度来说,矩形是最适合表示的。

Rectangle类其实之前在介绍Bitmapdata的时候大家也不陌生了,很多Bitmapdata变化区域的界定就是靠的他。这次详细的讲解主要是对他的一些运算API做一个了解。

Rectangle类属于geom包,geom是geometry(几何)的缩写,同属这个包的还有Point类,这个包里放的也都是一些数学运算的概念类。Rectangle直接继承Object对象,所以没有太多父类东西要了解。一共有11个公共属性,16个公共方法。看似很多,其实很多都很容易理解。

二,公共属性:

分两部分来,一部分是直接可得的,一部分是可以运算但是AS3已经内部计算好可以直接调用的。

第一部分:

1,x:就是区域的x坐标。(左上角)

2,y:就是区域的y坐标。(左上角)

3,width:区域的宽

4,height:区域的高

第二部分:

5,top:区域的顶的y坐标,其实就是y

6,bottom:区域底的y坐标,其实就是y+height

7,left:区域左边缘的x坐标,其实就是x

8,right:区域右边缘的x坐标,其实就是x+width

9,topLeft:一个point对象,记录了左上角的位置,可以读写(即可以通过给这个属性赋值一个point对象来设置x,y值)

10,rightBottom:也是一个point对象,记录了右下角位置,可以读写(即可以通过给这个对象赋值,配合topLeft一起修改Rectangle的width,height,bottom,right属性)

11,size:还是一个point对象,记录了区域的长宽,可以读写(即可以通过赋值,直观的改变区域的长宽,间接改变了面积)。

虽然有11个公共属性,可是核心的也就x,y,width,height四个,其他的完全可以通过简单的数学运算取代。不过如果能熟练运用其他的7个公共属性也不错。修改起来也更加直观。

三,公共方法:

1,构造方法

Rectangle(x:Number = 0, y:Number = 0, width:Number = 0, height:Number = 0)

这个构造方法很好理解,直接设置了核心的4个公共属性。

2,复制方法

clone():Rectangle

这个方法也很简单,就是复杂类型对象的复制。

3,判断某个点是否在区域内(方法1)

contains(x:Number, y:Number):Boolean

很直观,输入点的坐标x,y,返回Boolen值

4,判断某个点是否在区域内(方法2)

containsPoint(point:Point):Boolean

跟contains()完全一样的作用,只不过参数换成了一个point对象。

5,判断区域A是否包含另外一个区域B

containsRect(rect:Rectangle):Boolean

这里的包含,是指完全包住,即成一个“回”字型。

6,判断两个区域是否相等

equals(toCompare:Rectangle):Boolean

这里的相等,不是指是否同一个对象的相等,而是指构成两个区域的4要素:x,y,width,height完全相等。如果完全相等这返回true

7,改变区域大小(方法1)

inflate(dx:Number, dy:Number):void

inflate的意思是膨胀。有人可能好奇,增加大小直接设置width和height不就好了吗?这个方法的不同是,他是以区域的中心点,向左右上下各增长dx,dy的,内部的运算其实是:

x -= dx;
width += 2 * dx;

y -= dy;
height += 2 * dy;

PS:dx,dy可以输入负数做参数,这样就达到了缩小区域的目的。

8,改变区域大小(方法2)

inflatePoint(point:Point):void

跟inflate()一样作用,只是参数换成了point而已。

9,两区域取交集

intersection(toIntersect:Rectangle):Rectangle

标题其实已经说出了这个方法的作用,就是取得两个区域的交集,即返回相交部分的区域。

10,判断两区域是否相交

intersects(toIntersect:Rectangle):Boolean

这个函数和intersection()很容易混淆,因为根本就是同一个词的不同词性,一个是名词一个是动词。不过还好看返回值还是能清晰分出的。这个方法就是判断两区域是否相交。

11,判断区域是否为空

isEmpty():Boolean

这里空的意思,可以理解为区域的面积width*height=0,即width==0 || height==0

12,位移(方法1)

offset(dx:Number, dy:Number):void

就是改变左上角的位置,其实就是改变x,y的值。具体作用为:

Rectangle.x += dx;

Rectangle.y += dy;

13,位移(方法2)

offsetPoint(point:Point):void

跟offset()作用一样,只是参数换成了point

14,清零

setEmpty():void

描述是将Rectangle所有属性清零,就是4大基本属性x,y,width,height都为0

15,输出

toString():String

没啥特别的,就是一个转String类型时调用的方法。输出4大基本属性x,y,width,height

16,合并区域

union(toUnion:Rectangle):Rectangle

将两个区域合并,听上去好像很不错,但是别高兴太早,这个合并可不像Photoshop里的合并多个选择区域那种合并。这个合并区域是合出一个大矩形···囧···就是返回一个大矩形刚刚好包含了两个矩形。

总结:

总的来说Rectangle类并不难掌握。

其中公共属性就是4大属性x,y,width,height。

而公共方法主要分作三大功能:

1,改变4大属性,如inflateinflatePointsetEmpty

2,判断包含,如containscontainsPointcontainsRectequals

3,相交,相并操作,如intersectionintersectsunion

4,还有就是剩下一些杂七杂八的小功能。

但Rectangle作为运算类,可能没有太多精彩的玩法。但是却是很多算法的基石。例如模拟即时战略的选取功能等等。还有类似BitmapData运算中限制变化的区域以达到优化的目的等等。

Rectangle类详解的更多相关文章

  1. java之StringBuffer类详解

    StringBuffer 线程安全的可变字符序列. StringBuffer源码分析(JDK1.6): public final class StringBuffer extends Abstract ...

  2. java之AbstractStringBuilder类详解

    目录 AbstractStringBuilder类 字段 构造器 方法   public abstract String toString() 扩充容量 void  expandCapacity(in ...

  3. java之StringBuilder类详解

    StringBuilder 非线程安全的可变字符序列 .该类被设计用作StringBuffer的一个简易替换,用在字符串缓冲区被单个线程使用的时候(这种情况很普遍).如果可能,建议优先采用该类,因为在 ...

  4. Java String类详解

    Java String类详解 Java字符串类(java.lang.String)是Java中使用最多的类,也是最为特殊的一个类,很多时候,我们对它既熟悉又陌生. 类结构: public final ...

  5. QAction类详解:

    先贴一段描述:Qt文档原文: Detailed Description The QAction class provides an abstract user interface action tha ...

  6. JAVAEE学习——struts2_01:简介、搭建、架构、配置、action类详解和练习:客户列表

    一.struts2是什么 1.概念 2.struts2使用优势以及历史 二.搭建struts2框架 1.导包 (解压缩)struts2-blank.war就会看到 2.书写Action类 public ...

  7. Struts2-整理笔记(二)常量配置、动态方法调用、Action类详解

    1.修改struts2常量配置(3种) 第一种 在str/struts.xml中添加constant标签 <struts> <!-- 如果使用使用动态方法调用和include冲突 - ...

  8. C# 内置 DateTime类详解

    C# 内置 DateTime类详解 摘抄自微软官方文档,用来方便自己查阅:网址:https://msdn.microsoft.com/zh-cn/library/system.datetime(v=v ...

  9. Android游戏开发之旅 View类详解

    Android游戏开发之旅 View类详解 自定义 View的常用方法: onFinishInflate() 当View中所有的子控件 均被映射成xml后触发 onMeasure(int, int) ...

随机推荐

  1. find命令进阶用法(一)

    -cmin n: 查找 exactly n 分钟前内容或属性被最后修过的文件 -cnewer file: 查找内容或属性的最后修改时间晚于file文件的文件 -ctime n: 查找 **n*24** ...

  2. Zabbix微信报警脚本及写触发记录

    一.Zabbix微信报警 默认路径:/usr/lib/zabbix/scripts/weixin.py #!/usr/bin/python # -*- coding: utf-8 -*- import ...

  3. Linux进程管理工具vmstat,iostat,pmap

    一查看内存的工具——vmstat (一)vmstat的介绍 vmstat vmstat是Virtual Memory Statistics(虚拟内存统计)的缩写 利用vmstat命令可以对操作系统的报 ...

  4. 媲美5G的Wifi网速、“备战”资产一键领……揭秘双11小二背后的保障力量

    如今,双11不光是购物狂欢节,更是对技术的一次“大考”,对于阿里巴巴企业内部运营的基础保障技术而言,亦是如此. 回溯双11历史,这背后也经历过“小米加步枪”的阶段:作战室从随处是网线,交换机放地上的“ ...

  5. 10.15 sed 命令实践

    在n行前插入 [root@wen data]# sed '2i 106,dandan,CSO' person.txt101,oldboy,CEO106,dandan,CSO102,zhangyao,C ...

  6. AcWing 244. 谜一样的牛 (树状数组+二分)打卡

    题目:https://www.acwing.com/problem/content/245/ 题意:有n只牛,现在他们按一种顺序排好,现在知道每只牛前面有几只牛比自己低,牛的身高是1-n,现在求每只牛 ...

  7. 韩老师CCNA学习笔记

    1.MSCONFIG服务里面可以选择隐藏Windows服务,就能看出程序安装的服务.即使显示已停止,仍可能在运行 2.命令行输入netstat -anbo ,显示当前连接和端口,数字显示,以及程序的路 ...

  8. Hibernate:More than one row with the given identifier was found解决办法

    今天写一个Action 通过 HQL 查询一个表 出现异常 “More than one row with the given identifier was found” 问题原因: 数据库出现数据异 ...

  9. openoffice+pdf2swf+FlexPaper在线显示office和pdf

    前提:本人的系统为Ubuntu 13.10 64位系统.本篇是我在配置好环境后一段时间写的,所以操作上可能会有也错误,因此仅供参考. 搜索在线显示office和pdf,最常见的方法就是把都转为swf, ...

  10. Centos7从零开始】Centos 下硬盘分区的最佳方案

    https://www.cnblogs.com/chen1970/p/11071590.html 在对硬盘进行分区前,应该先弄清楚计算机担负的工作及硬盘的容量有多大,还要考虑到以下几个问题: 第一点也 ...