getBounds() 方法与 getRect()

getBounds () 方法

public function getBounds(targetCoordinateSpace:DisplayObject):Rectangle

语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9, Flash Lite 4


返回一个矩形,该矩形定义相对于 targetCoordinateSpace 对象坐标系的显示对象区域。考虑以下代码,此代码显示了矩形
的返回方式根据您传递给该方法的 targetCoordinateSpace 参数的不同而不同:

var container:Sprite = new Sprite();
container.x = 100;
container.y = 100;
this.addChild(container);
var contents:Shape = new Shape();
contents.graphics.drawCircle(0,0,100);
container.addChild(contents);
trace(contents.getBounds(container));
// (x=-100, y=-100, w=200, h=200) 得到一个新的矩形,这个新矩形的x,y值,也就是位置是相对于getBounds参数container对象原位置向左向上偏移100。也就是说x,y位置是相对于container的注册点的偏移。
trace(contents.getBounds(this));
// (x=0, y=0, w=200, h=200),这里的this应该是指舞台。位置相对于舞台注册点的偏移。
请注意:使用 localToGlobal() 和 globalToLocal() 方法可以分别将显示对象的本地坐标转换为显示坐标,或将显示坐标转
换为本地坐标
这里的提示是说,得到的rectangle要经过坐标转换才有实用价值。
getBounds() 方法与 getRect() 方法类似;但是 getBounds() 方法返回的矩形包括形状的所有笔触,然而 getRect() 方法返回的矩形则不包括
getRect () 方法
public function getRect(targetCoordinateSpace:DisplayObject):Rectangle
语言版本: ActionScript 3.0
运行时版本: AIR 1.0 Flash Player 9, Flash Lite 4
返回一个矩形,该矩形根据 targetCoordinateSpace 参数定义的坐标系定义显示对象的边界,但不包括形状上的任何笔触。getRect() 方法返回的值等于或小于由 getBounds() 方法返回的值。
请注意:使用 localToGlobal() 和 globalToLocal() 方法可以分别将显示对象的本地坐标转换为舞台坐标,或将舞台坐标转换为本地坐标。
参数
targetCoordinateSpace:DisplayObject — 定义要使用的坐标系的显示对象。
返回
Rectangle — 定义与 targetCoordinateSpace 对象坐标系统相关的显示对象面积的矩形。
另请参见
getBounds()

示例 ( 如何使用本示例 )
下例显示 getBounds() 方法如何由于笔触占据的更多区域而比 getRect() 方法返回更大的矩形。在这种情况下,triangle Sprite 包括其他笔触,因为有 lineStyle() 方法的 width 和 jointStyle 参数。trace() 输出(在最后两行中)显示了 getRect() 和 getBounds() 矩形之间的差异:

import flash.display.CapsStyle;
import flash.display.JointStyle;
import flash.display.LineScaleMode;
import flash.display.Sprite;
import flash.geom.Rectangle;

var triangle:Sprite = new Sprite();
var color:uint = 0xFF0044;
var width:Number = 20;
var alpha:Number = 1.0;
var pixelHinting:Boolean = true;
var scaleMode:String = LineScaleMode.NORMAL;
var caps:String = CapsStyle.SQUARE;
var joints:String = JointStyle.MITER;
triangle.graphics.lineStyle(width, color, alpha, pixelHinting, scaleMode, caps, joints);

var triangleSide:Number = 100;
triangle.graphics.moveTo(0, 0);
triangle.graphics.lineTo(0, triangleSide);
triangle.graphics.lineTo(triangleSide, triangleSide);
triangle.graphics.lineTo(0, 0);

addChild(triangle);

trace(triangle.getBounds(this)); // (x=-10, y=-24.1, w=134.10000000000002, h=134.1) //它的线很粗,它的起始点是(0,0)
它的起始点确实在(0,0),但因为线粗的原因,线粗为20像素,所以从(0,0)到(0,100)这条垂直线上,有一半在舞台外面,所以当相对于舞台是,它的横坐标是-10,它的纵坐标为-24。宽度和高度也都把线宽算到里面了。
trace(triangle.getRect(this)); // (x=0, y=0, w=100, h=100)

你可能感兴趣的:(getBounds() 方法与 getRect())