一,概括:

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

其实不是的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. session有效时间

    request.getSession().setMaxInactiveInterval(-1);//session不失效 request.getSession().setMaxInactiveInte ...

  2. SpringIntegration---Redis

    1.依赖 <dependency> <groupId>org.springframework.integration</groupId> <artifactI ...

  3. restful接口风格

    一.定义 REST全称是Representational State Transfer, 中文意思是表述性状态转移. REST指的是一组架构约束条件和原则,如果一个架构符合REST的约束条件和原则,我 ...

  4. HTTP协议缓存

    缓存的概念 缓存这个东西真的是无处不在, 有浏览器端的缓存, 有服务器端的缓存,有代理服务器的缓存, 有ASP.NET页面缓存,对象缓存. 数据库也有缓存, 等等. http中具有缓存功能的是浏览器缓 ...

  5. HTML5浏览器

    你可以学会如何使用旧的浏览器正确处理新的HTML5. HTML5 浏览器支持 HTML5 支持所有现代浏览器. 此外,所有的浏览器,旧的和新的,自动处理未被识别的元素作为内联元素. 因为这样,你可以& ...

  6. python环境变量

    下载并升级更新pip python -m pip install -U pip 变量名:PY_HOME   变量值:python路径 path:win10加在最后(记得用;号隔开):win7加在前面记 ...

  7. auto_now_add与auto_now的区别

  8. yii2.0增删改查实例讲解

    yii2.0增删改查实例讲解一.创建数据库文件. 创建表 CREATE TABLE `resource` ( `id` int(10) NOT NULL AUTO_INCREMENT, `textur ...

  9. 51nod 1518 稳定多米诺覆盖(容斥+二项式反演+状压dp)

    [传送门[(http://www.51nod.com/Challenge/Problem.html#!#problemId=1518) 解题思路 直接算不好算,考虑容斥,但并不能把行和列一起加进去容斥 ...

  10. 如何稀释 流事件 (如,onscroll、change、input、mouseover 等 事件)

    1.问题引入:https://segmentfault.com/q/1010000000707337?_ea=62905 2.javascript中的函数节流和函数去抖:https://www.cnb ...