包 | flash.display |
类 | public class DisplayObject |
继承 | DisplayObject EventDispatcher Object |
实现 | IBitmapDrawable |
子类 | AVM1Movie, Bitmap, InteractiveObject, MorphShape, Shape, StaticText, Video |
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
DisplayObject 类支持基本功能(如对象的 x 和 y 位置),也支持更高级的对象属性(如它的转换矩阵)。
DisplayObject 是一种抽象基类;因此,不能直接调用 DisplayObject。调用 new DisplayObject()
会引发 ArgumentError
异常。
所有显示对象都继承自 DisplayObject 类。
DisplayObject 类本身不包含任何用于在屏幕上呈现内容的 API。因此,如果要创建 DisplayObject 类的自定义子类,您将需要扩展其中一个具有在屏幕上呈现内容的 API 的子类,如 Shape、Sprite、Bitmap、SimpleButton、TextField 或 MovieClip 类。
DisplayObject 类包含若干广播事件。通常,任何特定事件的目标均为一个特定的 DisplayObject 实例。例如,added
事件的目标是已添加到显示列表的特定 DisplayObject 实例。若只有一个目标,则会将事件侦听器限制为只能放置到该目标上(在某些情况下,可放置到显示列表中该目标的祖代上)。但是,对于广播事件,目标不是特定的 DisplayObject 实例,而是所有 DisplayObject 实例(包括那些不在显示列表中的实例)。这意味着您可以向任何 DisplayObject 实例添加侦听器来侦听广播事件。除了 DisplayObject 类的 Events 表中列出的广播事件,DisplayObject 类还从 EventDispatcher 类继承如下两个广播事件:activate
和 deactivate
。
一些以前在 ActionScript 1.0 和 2.0 MovieClip、TextField 和 Button 类中使用的属性(如 _alpha
、_height
、_name
、_width
、_x
、_y
等)在 ActionScript 3.0 DisplayObject 类中有等效属性,但它们已被重命名,因此不再以下划线 (_) 字符开头。
有关详细信息,请参阅《ActionScript 3.0 开发人员指南》中的“显示编程”一章。
相关 API 元素
属性 | 由以下参数定义 | ||
---|---|---|---|
accessibilityProperties : AccessibilityProperties
此显示对象的当前辅助功能选项。 | DisplayObject | ||
alpha : Number
表示指定对象的 Alpha 透明度值。 | DisplayObject | ||
blendMode : String
BlendMode 类中的一个值,用于指定要使用的混合模式。 | DisplayObject | ||
blendShader : Shader [只写]
设置用于混合前景和背景的着色器。 | DisplayObject | ||
cacheAsBitmap : Boolean
如果设置为 true,则 Flash 运行时将缓存显示对象的内部位图表示形式。 | DisplayObject | ||
cacheAsBitmapMatrix : Matrix
如果为非 null,则 Matrix 对象会定义显示对象在 cacheAsBitmap 设置为 true 时的呈现方式。 | DisplayObject | ||
constructor : Object
对类对象或给定对象实例的构造函数的引用。 | Object | ||
filters : Array
包含当前与显示对象关联的每个滤镜对象的索引数组。 | DisplayObject | ||
height : Number
表示显示对象的高度,以像素为单位。 | DisplayObject | ||
loaderInfo : LoaderInfo [只读]
返回一个 LoaderInfo 对象,其中包含加载此显示对象所属的文件的相关信息。 | DisplayObject | ||
mask : DisplayObject
调用显示对象被指定的 mask 对象遮罩。 | DisplayObject | ||
metaData : Object
如果元数据是通过 PlaceObject4 标记与此 DisplayObject 的实例一起存储在 SWF 文件中的,则获取 DisplayObject 实例的元数据对象。 | DisplayObject | ||
mouseX : Number [只读]
表示此鼠标或用户输入设备位置的 x 坐标,以像素为单位。 | DisplayObject | ||
mouseY : Number [只读]
表示此鼠标或用户输入设备位置的 y 坐标,以像素为单位。 | DisplayObject | ||
name : String
表示 DisplayObject 的实例名称。 | DisplayObject | ||
opaqueBackground : Object
指定显示对象是否由于具有某种背景颜色而不透明。 | DisplayObject | ||
parent : DisplayObjectContainer [只读]
表示包含此显示对象的 DisplayObjectContainer 对象。 | DisplayObject | ||
root : DisplayObject [只读]
对于加载的 SWF 文件中的显示对象,root 属性是此 SWF 文件所表示的显示列表树结构部分中的顶级显示对象。 | DisplayObject | ||
rotation : Number
表示 DisplayObject 实例距其原始方向的旋转程度,以度为单位。 | DisplayObject | ||
rotationX : Number
表示 DisplayObject 实例相对于 3D 父容器距离其原始方向的 x 轴旋转(以度为单位)。 | DisplayObject | ||
rotationY : Number
表示 DisplayObject 实例相对于 3D 父容器距离其原始方向的 y 轴旋转(以度为单位)。 | DisplayObject | ||
rotationZ : Number
表示 DisplayObject 实例相对于 3D 父容器距离其原始方向的 z 轴旋转(以度为单位)。 | DisplayObject | ||
scale9Grid : Rectangle
当前有效的缩放网格。 | DisplayObject | ||
scaleX : Number
表示从注册点开始应用的对象的水平缩放比例(百分比)。 | DisplayObject | ||
scaleY : Number
表示从对象注册点开始应用的对象的垂直缩放比例(百分比)。 | DisplayObject | ||
scaleZ : Number
表示从对象的注册点开始应用的对象的深度缩放比例(百分比)。 | DisplayObject | ||
scrollRect : Rectangle
显示对象的滚动矩形范围。 | DisplayObject | ||
stage : Stage [只读]
显示对象的舞台。 | DisplayObject | ||
transform : flash.geom:Transform
一个对象,具有与显示对象的矩阵、颜色转换和像素范围有关的属性。 | DisplayObject | ||
visible : Boolean
显示对象是否可见。 | DisplayObject | ||
width : Number
表示显示对象的宽度,以像素为单位。 | DisplayObject | ||
x : Number
表示 DisplayObject 实例相对于父级 DisplayObjectContainer 本地坐标的 x 坐标。 | DisplayObject | ||
y : Number
表示 DisplayObject 实例相对于父级 DisplayObjectContainer 本地坐标的 y 坐标。 | DisplayObject | ||
z : Number
表示 DisplayObject 实例相对于 3D 父容器沿 z 轴的 z 坐标位置。 | DisplayObject |
方法 | 由以下参数定义 | ||
---|---|---|---|
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
使用 EventDispatcher 对象注册事件侦听器对象,以使侦听器能够接收事件通知。 | EventDispatcher | ||
将事件调度到事件流中。 | EventDispatcher | ||
返回一个矩形,该矩形定义相对于 targetCoordinateSpace 对象坐标系的显示对象区域。 | DisplayObject | ||
返回一个矩形,该矩形根据 targetCoordinateSpace 参数定义的坐标系定义显示对象的边界,但不包括形状上的任何笔触。 | DisplayObject | ||
将 point 对象从舞台(全局)坐标转换为显示对象的(本地)坐标。 | DisplayObject | ||
将二维点从舞台(全局)坐标转换为三维显示对象的(本地)坐标。 | DisplayObject | ||
检查 EventDispatcher 对象是否为特定事件类型注册了任何侦听器。 | EventDispatcher | ||
表示对象是否已经定义了指定的属性。 | Object | ||
计算显示对象的边框,以确定它是否与 obj 显示对象的边框重叠或相交。 | DisplayObject | ||
计算显示对象,以确定它是否与 x 和 y 参数指定的点重叠或相交。 | DisplayObject | ||
表示 Object 类的实例是否在指定为参数的对象的原型链中。 | Object | ||
将三维显示对象的(本地)坐标的三维点转换为舞台(全局)坐标中的二维点。 | DisplayObject | ||
将 point 对象从显示对象的(本地)坐标转换为舞台(全局)坐标。 | DisplayObject | ||
表示指定的属性是否存在、是否可枚举。 | Object | ||
从 EventDispatcher 对象中删除侦听器。 | EventDispatcher | ||
设置循环操作动态属性的可用性。 | Object | ||
返回此对象的字符串表示形式,其格式设置遵守区域设置特定的约定。 | Object | ||
返回指定对象的字符串表示形式。 | Object | ||
返回指定对象的原始值。 | Object | ||
检查是否用此 EventDispatcher 对象或其任何祖代为指定事件类型注册了事件侦听器。 | EventDispatcher |
事件 | 摘要 | 由以下参数定义 | ||
---|---|---|---|---|
[广播事件] Flash Player 或 AIR 应用程序获得操作系统焦点并变为活动状态时将调度此事件。 | EventDispatcher | |||
将显示对象添加到显示列表中时调度。 | DisplayObject | |||
在将显示对象直接添加到舞台显示列表或将包含显示对象的子树添加至舞台显示列表中时调度。 | DisplayObject | |||
[广播事件] Flash Player 或 AIR 应用程序失去操作系统焦点并变为非活动状态时将调度此事件。 | EventDispatcher | |||
[播放事件] 播放头进入新帧时调度。 | DisplayObject | |||
[广播事件] 播放头退出当前帧时调度。 | DisplayObject | |||
[广播事件] 在帧显示对象的构造函数运行之后但在帧脚本运行之前调度。 | DisplayObject | |||
将要从显示列表中删除显示对象时调度。 | DisplayObject | |||
在从显示列表中直接删除显示对象或删除包含显示对象的子树时调度。 | DisplayObject | |||
[广播事件] 将要更新和呈现显示列表时调度。 | DisplayObject |
accessibilityProperties | 属性 |
accessibilityProperties:AccessibilityProperties
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9 |
此显示对象的当前辅助功能选项。如果您修改 accessibilityProperties
属性或 accessibilityProperties
内部的任何字段,则必须调用 Accessibility.updateProperties()
方法以使您的更改生效。
请注意:对于在 Flash 创作环境中创建的对象,将使用您在“辅助功能”面板中为该对象输入的所有信息来填充 accessibilityProperties
的值。
实现
public function get accessibilityProperties():AccessibilityProperties
public function set accessibilityProperties(value:AccessibilityProperties):void
相关 API 元素
示例 ( 如何使用本示例 )
import flash.text.TextField; import flash.accessibility.AccessibilityProperties; import flash.accessibility.Accessibility; import flash.system.Capabilities; var tf:TextField = new TextField(); tf.text = "hello"; var accessProps:AccessibilityProperties = new AccessibilityProperties(); accessProps.name = "Greeting"; tf.accessibilityProperties = accessProps; if (Capabilities.hasAccessibility) { Accessibility.updateProperties(); } trace(tf.accessibilityProperties.name); // Greeting
alpha | 属性 |
alpha:Number
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
表示指定对象的 Alpha 透明度值。有效值为 0(完全透明)到 1(完全不透明)。默认值为 1。alpha
设置为 0 的显示对象是活动的,即使它们不可见。
实现
public function get alpha():Number
public function set alpha(value:Number):void
示例 ( 如何使用本示例 )
alpha
属性设置为 50%:
import flash.display.Sprite; import flash.events.MouseEvent; var circle:Sprite = new Sprite(); circle.graphics.beginFill(0xFF0000); circle.graphics.drawCircle(40, 40, 40); addChild(circle); circle.addEventListener(MouseEvent.MOUSE_OVER, dimObject); circle.addEventListener(MouseEvent.MOUSE_OUT, restoreObject); function dimObject(event:MouseEvent):void { event.target.alpha = 0.5; } function restoreObject(event:MouseEvent):void { event.target.alpha = 1.0; }
blendMode | 属性 |
blendMode:String
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9 |
BlendMode 类中的一个值,用于指定要使用的混合模式。 内部绘制位图的方法有两种。如果启用了混合模式或外部剪辑遮罩,则将通过向矢量渲染器添加有位图填充的正方形来绘制位图。 如果尝试将此属性设置为无效值,则 Flash 运行时会将此值设置为 BlendMode.NORMAL
。
blendMode
属性影响显示对象的每个像素。每个像素都由三种原色(红色、绿色和蓝色)组成,每种原色的值介于 0x00 和 0xFF 之间。Flash Player 或 Adobe AIR 将影片剪辑中一个像素的每种原色与背景中像素的对应颜色进行比较。例如,如果 blendMode
设置为 BlendMode.LIGHTEN
,则 Flash Player 或 Adobe AIR 会将显示对象的红色值与背景的红色值进行比较,然后使用两者中较亮的一种颜色作为显示颜色的红色成分的值。
下表将对 blendMode
设置进行说明。BlendMode 类定义可使用的字符串值。表中的插图显示应用于交叠于显示对象 (1) 之上的圆形显示对象 (2) 的 blendMode
值。
BlendMode 常量 | 插图 | 说明 |
---|---|---|
BlendMode.NORMAL | 该显示对象出现在背景前面。显示对象的像素值将覆盖背景的像素值。在显示对象为透明的区域,背景是可见的。 | |
BlendMode.LAYER | 强制为该显示对象创建一个透明度组。这意味着首先在临时缓冲区中预构建显示对象,然后再进行下一步处理。如果显示对象是使用位图缓存进行预缓存的,或显示对象是至少带有一个子对象(具有 BlendMode.NORMAL 以外的 blendMode 设置)的显示对象容器,则这将自动完成。在 GPU 呈现下不支持。
| |
BlendMode.MULTIPLY | 将显示对象原色的值与背景颜色的值相乘,然后通过除以 0xFF 进行标准化,从而得到较暗的颜色。此设置通常用于阴影和深度效果。
例如,如果显示对象中一个像素的某个原色(例如红色)与背景中对应的像素颜色的值均为 0x88,则相乘结果为 0x4840。除以 0xFF 将得到该原色的值 0x48,这是比显示对象或背景颜色暗的阴影。 | |
BlendMode.SCREEN | 将显示对象颜色的补色(反色)与背景颜色的补色相乘,会产生漂白效果。此设置通常用于产生加亮效果或用来删除显示对象的黑色区域。 | |
BlendMode.LIGHTEN | 在显示对象原色和背景颜色中选择相对较亮的颜色(具有较大值的颜色)。此设置通常用于叠加类型。
例如,如果显示对象的某个像素的 RGB 值为 0xFFCC33,背景像素的 RGB 值为 0xDDF800,则显示像素的结果 RGB 值为 0xFFF833(因为 0xFF > 0xDD,0xCC < 0xF8,且 0x33 > 0x00 = 33)。在 GPU 呈现下不支持。 | |
BlendMode.DARKEN | 在显示对象原色和背景颜色中选择相对较暗的颜色(具有较小值的颜色)。此设置通常用于叠加类型。
例如,如果显示对象的某个像素的 RGB 值为 0xFFCC33,背景像素的 RGB 值为 0xDDF800,则显示像素的结果 RGB 值为 0xDDCC00(因为 0xFF > 0xDD,0xCC < 0xF8,且 0x33 > 0x00 = 33)。在 GPU 呈现下不支持。 | |
BlendMode.DIFFERENCE | 将显示对象的原色与背景颜色进行比较,然后从较亮的原色值中减去较暗的原色值。此设置通常用于得到更明亮的颜色。
例如,如果显示对象的某个像素的 RGB 值为 0xFFCC33,背景像素的 RGB 值为 0xDDF800,则显示像素的结果 RGB 值为 0x222C33(因为 0xFF - 0xDD = 0x22,0xF8 - 0xCC = 0x2C,且 0x33 - 0x00 = 0x33)。 | |
BlendMode.ADD | 将显示对象的原色值添加到它的背景颜色中,上限值为 0xFF。此设置通常用于使两个对象间的加亮溶解产生动画效果。
例如,如果显示对象的某个像素的 RGB 值为 0xAAA633,背景像素的 RGB 值为 0xDD2200,则显示像素的结果 RGB 值为 0xFFC833(因为 0xAA + 0xDD > 0xFF,0xA6 + 0x22 = 0xC8,且 0x33 + 0x00 = 0x33)。 | |
BlendMode.SUBTRACT | 从背景颜色的值中减去显示对象原色的值,下限值为 0。此设置通常用于使两个对象间的变暗溶解产生动画效果。
例如,如果显示对象的某个像素的 RGB 值为 0xAA2233,背景像素的 RGB 值为 0xDDA600,则显示像素的结果 RGB 值为 0x338400(因为 0xDD - 0xAA = 0x33,0xA6 - 0x22 = 0x84 且 0x00 - 0x33 < 0x00)。 | |
BlendMode.INVERT | 反转背景。 | |
BlendMode.ALPHA | 将显示对象的每个像素的 Alpha 值应用于背景。这要求将父显示对象的 blendMode 设置设置为 BlendMode.LAYER 。例如,在此插图中,父显示对象是一个白色背景,它具有 blendMode = BlendMode.LAYER 。在 GPU 呈现下不支持。 | |
BlendMode.ERASE | 根据显示对象的 Alpha 值擦除背景。这要求将父显示对象的 blendMode 设置为 BlendMode.LAYER 。例如,在此插图中,父显示对象是一个白色背景,它具有 blendMode = BlendMode.LAYER 。在 GPU 呈现下不支持。 | |
BlendMode.OVERLAY | 根据背景的暗度调整每个像素的颜色。如果背景灰度值高于 50%,则显示对象和背景颜色进行叠加,从而产生较亮的颜色。如果背景灰度值低于 50%,则颜色相乘,从而产生较暗的颜色。此设置通常用于获得阴影效果。在 GPU 呈现下不支持。 | |
BlendMode.HARDLIGHT | 根据显示对象的暗度调整每个像素的颜色。如果显示对象灰度值高于 50%,则显示对象和背景颜色进行叠加,从而产生较亮的颜色。如果显示对象灰度值低于 50%,则颜色相乘,从而产生较暗的颜色。此设置通常用于获得阴影效果。在 GPU 呈现下不支持。 | |
BlendMode.SHADER | 不适用 | 使用自定义着色器例程调整颜色。将使用的着色器指定为赋予 blendShader 属性的 Shader 实例。如果将显示对象的 blendShader 属性设置为 Shader 实例,则会将显示对象的 blendMode 属性自动设置为 BlendMode.SHADER 。如果在未首先设置 blendShader 属性的情况下将 blendMode 属性设置为 BlendMode.SHADER ,则 blendMode 属性会设置为 BlendMode.NORMAL 。在 GPU 呈现下不支持。 |
实现
public function get blendMode():String
public function set blendMode(value:String):void
相关 API 元素
示例 ( 如何使用本示例 )
BlendMode.SUBTRACT
:
import flash.display.Sprite; import flash.display.BlendMode; import flash.events.MouseEvent; var square:Sprite = new Sprite(); square.graphics.beginFill(0xFF88CC); square.graphics.drawRect(0, 0, 80, 80); addChild(square); var circle:Sprite = new Sprite(); circle.graphics.beginFill(0xAA0022); circle.graphics.drawCircle(40, 40, 40); addChild(circle); circle.addEventListener(MouseEvent.MOUSE_OVER, dimObject); circle.addEventListener(MouseEvent.MOUSE_OUT, restoreObject); function dimObject(event:MouseEvent):void { event.target.blendMode = BlendMode.SUBTRACT; } function restoreObject(event:MouseEvent):void { event.target.blendMode = BlendMode.NORMAL; }
blendShader | 属性 |
blendShader:Shader
[只写] 语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
设置用于混合前景和背景的着色器。当 blendMode
属性设置为 BlendMode.SHADER
时,将使用指定的着色器为显示对象创建混合模式输出。
如果将显示对象的 blendShader
属性设置为 Shader 实例,则会将显示对象的 blendMode
属性自动设置为 BlendMode.SHADER
。如果设置了 blendShader
属性(这会将 blendMode
属性设置为 BlendMode.SHADER
),则 blendMode
属性的值会发生变化,只需将 blendMode
属性设置为 BlendMode.SHADER
即可将混合模式重置为使用混合着色器。除非要更改用于混合模式的着色器,否则无需再次设置 blendShader
属性。
赋予 blendShader
属性的 Shader 至少必须指定两个 image4
输入。无需使用关联 ShaderInput 对象的 input
属性在代码中指定输入。会自动使用背景显示对象作为第一个输入(index
为 0 的输入)。使用前景显示对象作为第二个输入(index
为 1 的输入)。用作混合着色器的着色器可以指定超过两个输入。在这种情况下,必须通过设置其 ShaderInput 实例的 input
属性来指定任何附加输入。
将 Shader 实例赋予此属性时,会在内部复制着色器。混合操作将使用该内部副本,而不是对原始着色器的引用。对着色器进行的任何更改(比如更改参数值、输入或字节代码)不会应用于所复制的用于混合模式的着色器。
实现
public function set blendShader(value:Shader):void
引发
ArgumentError — 当着色器输出类型与此操作不兼容时(着色器必须指定 pixel4 输出)。
| |
ArgumentError — 当着色器指定的图像输入少于两个,或者前两个输入不是 image4 输入时。
| |
ArgumentError — 当着色器指定了未提供的图像输入时。
| |
ArgumentError — 当使用 ByteArray 或 Vector.<Number> 实例作为输入,并且没有为 ShaderInput 指定 width 和 height 属性或指定的值与输入对象中的数据量不匹配时。有关详细信息,请参阅 ShaderInput.input 属性。
|
相关 API 元素
cacheAsBitmap | 属性 |
cacheAsBitmap:Boolean
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
如果设置为 true
,则 Flash 运行时将缓存显示对象的内部位图表示形式。此缓存可以提高包含复杂矢量内容的显示对象的性能。
具有已缓存位图的显示对象的所有矢量数据都将被绘制到位图而不是主显示。如果 cacheAsBitmapMatrix
为空或不受支持,位图将作为与最近的像素边界对齐的未拉伸且未旋转的像素复制到主显示。像素按一对一与父对象进行映射。如果位图的边界发生更改,则将重新创建位图而不会拉伸它。
如果支持 cacheAsBitmapMatrix
,并且它为非空,则对象将使用该矩阵绘制到屏幕范围外的位图,并且使用该呈现的拉伸和/或旋转结果将对象绘制到主显示。
除非将 cacheAsBitmap
属性设置为 true
,否则不会创建内部位图。
将 cacheAsBitmap
属性设置为 true
后,呈现并不更改,但是,显示对象将自动执行像素贴紧。动画速度可能会大大加快,具体取决于矢量内容的复杂性。
只要对显示对象(当其 filter
数组不为空时)应用滤镜,cacheAsBitmap
属性就自动设置为 true
,而且如果对显示对象应用了滤镜,即使将该属性设置为 false
,也会将该显示对象的 cacheAsBitmap
报告为 true
。如果清除显示对象的所有滤镜,则 cacheAsBitmap
设置将更改为它上次的设置。
在下面的情况下,即使将 cacheAsBitmap
属性设置为 true
,显示对象也不使用位图,而是从矢量数据呈现:
- 位图过大。在 AIR 1.5 和 Flash Player 10 中,位图图像的最大宽度或高度为 8,191 像素,并且像素总数不能超过 16,777,215 像素。(因此,如果位图图像的宽度为 8,191 像素,则其高度只能为 2,048 像素。)在 Flash Player 9 及早期版本中,高度最大为 2880 像素,宽度最大为 2,880 像素。
- 位图无法分配(内存不足错误)。
最好将 cacheAsBitmap
属性与主要具有静态内容且不频繁缩放和旋转的影片剪辑一起使用。对于这样的影片剪辑,在转换影片剪辑时(更改其 x 和 y 位置时),cacheAsBitmap
可以提高性能。
实现
public function get cacheAsBitmap():Boolean
public function set cacheAsBitmap(value:Boolean):void
相关 API 元素
示例 ( 如何使用本示例 )
cacheAsBitmap
属性的值,该值在应用滤镜时设置为 true
:
import flash.display.Sprite; import flash.filters.DropShadowFilter var circle:Sprite = new Sprite(); circle.graphics.beginFill(0xAA0022); circle.graphics.drawCircle(40, 40, 40); addChild(circle); trace(circle.cacheAsBitmap); // false var filter:DropShadowFilter = new DropShadowFilter(); circle.filters = [filter]; trace(circle.cacheAsBitmap); // true
cacheAsBitmapMatrix | 属性 |
cacheAsBitmapMatrix:Matrix
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 2.0 |
如果为非 null,则 Matrix 对象会定义显示对象在 cacheAsBitmap
设置为 true
时的呈现方式。应用程序使用此矩阵作为呈现显示对象的位图版本时应用的转换矩阵。
AIR 配置文件支持:移动设备支持此功能,但桌面操作系统不支持此功能。另外,它对于 AIR for TV 设备只有有限的支持。具体而言,在 AIR for TV 设备上,仅支持缩放和平移转换,但是不支持旋转和倾斜。有关在多个配置文件之间支持 API 的详细信息,请参阅 AIR 配置文件支持。
使用 cacheAsBitmapMatrix
设置,应用程序将保留经过各种 2D 变形的缓存位图图像,包括平移、旋转和缩放。如果应用程序使用硬件加速,则对象将作为纹理存储在视频内存中。这样可允许 GPU 对对象应用受支持的变形。GPU 执行这些转换的速度比 CPU 快。
要使用硬件加速功能,请在 Flash Professional CS5 中的“iPhone 设置”对话框的“常规”选项卡上将“呈现”设置为 GPU。或在应用程序描述符文件中将 renderMode
属性设置为 gpu
。请注意,AIR for TV 设备将自动使用硬件加速(如果可用)。
例如,以下代码将显示对象的未转换的位图表示形式发送到 GPU:
matrix:Matrix = new Matrix(); // creates an identity matrix mySprite.cacheAsBitmapMatrix = matrix; mySprite.cacheAsBitmap = true;
通常,恒等矩阵 (new Matrix()
) 就足够了。但是,您可以使用其他矩阵(例如按比例缩小的矩阵)将其他位图上载到 GPU。例如,以下示例应用了对 x 轴和 y 轴按 0.5 缩放的 cacheAsBitmapMatrix
矩阵。GPU 使用的位图对象较小,但是,GPU 将调整其大小,以便与显示对象的 transform.matrix 属性相匹配:
matrix:Matrix = new Matrix(); // creates an identity matrix matrix.scale(0.5, 0.5); // scales the matrix mySprite.cacheAsBitmapMatrix = matrix; mySprite.cacheAsBitmap = true;
通常,您应该选择使用将显示对象的大小转换为在应用程序显示大小的矩阵。例如,如果您的应用程序将 Sprite 的位图版本显示为原来的一半,则应该使用缩小一半的矩阵。如果您的应用程序显示的 Sprite 大于其当前尺寸,则应该使用放大该系数的矩阵。
注意:cacheAsBitmapMatrix
属性适用于 2D 变形。如果需要在 3D 中应用变形,您可能需要通过设置对象的 3D 属性,并且处理它的 transform.matrix3D
属性来应用变形。如果使用 GPU 模式打包应用程序,则允许 GPU 对对象应用 3D 变形。3D 对象将忽略 cacheAsBitmapMatrix
。
实现
public function get cacheAsBitmapMatrix():Matrix
public function set cacheAsBitmapMatrix(value:Matrix):void
相关 API 元素
示例 ( 如何使用本示例 )
cacheAsBitmapMatrix
属性对影片剪辑 my_shape
的位图版本进行转换。
import flash.geom.Matrix; import flash.display.*; import flash.utils.Timer; var my_shape:MovieClip = new MovieClip(); my_shape.graphics.beginFill(0xCCFF00); my_shape.graphics.drawRect(200, 0, 100, 100); addChild(my_shape); var my_timer:Timer = new Timer(250); my_timer.start(); my_timer.addEventListener(TimerEvent.TIMER, timerHandler); // make sure this Display Object remains cached for all 2D transforms my_shape.cacheAsBitmap = true; my_shape.cacheAsBitmapMatrix = new Matrix(); // rotation variables const initAngle:Number = 0; const pi:Number = 3.142; const incrAngle:Number = pi/10; // scaling variables const initScale:Number = 0.25; const incrScale: Number = 1.1; var initHeight : Number = my_shape.height; var initWidth : Number = my_shape.width; // translation variables var incrX : Number = root.width / 20; var incrY : Number = root.height / 10; // do some initial transforms var tempMat : Matrix = my_shape.transform.matrix; tempMat.rotate(initAngle); tempMat.scale(initScale, initScale); my_shape.transform.matrix = tempMat; function timerHandler(evt:TimerEvent):void { tempMat = my_shape.transform.matrix; tempMat.rotate(incrAngle); tempMat.translate(incrX, incrY); tempMat.scale(incrScale, incrScale); my_shape.transform.matrix = tempMat; // ensure we are still in a reasonable state or reset if(my_shape.height > stage.stageHeight/2) { my_shape.height = initHeight; } if(my_shape.width > stage.stageWidth/2) { my_shape.width = initWidth; } if(my_shape.x > stage.stageWidth) { my_shape.x = 0; } else if (my_shape.x < 0) { my_shape.x = stage.stageWidth; } if(my_shape.y > stage.stageHeight) { my_shape.y = 0; } else if (my_shape.y < 0) { my_shape.y = stage.stageHeight; } }
filters | 属性 |
filters:Array
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9 |
包含当前与显示对象关联的每个滤镜对象的索引数组。flash.filters 包中的多个类定义了可使用的特定滤镜。
在设计时或在运行时,可通过使用 ActionScript 代码在 Flash Professional 中应用筛选器。要通过使用 ActionScript 应用滤镜,您必须制作整个 filters
数组的临时副本,修改临时数组,然后将临时数组的值分配回 filters
数组。无法直接将新滤镜对象添加到 filters
数组。
要通过使用 ActionScript 添加滤镜,请执行以下步骤(假定目标显示对象名为 myDisplayObject
):
- 使用所选滤镜类的构造函数方法创建一个新的滤镜对象。
- 将
myDisplayObject.filters
数组的值分配给临时数组,例如一个名为myFilters
的数组。 - 将新的滤镜对象添加到临时数组
myFilters
。 - 将临时数组的值分配给
myDisplayObject.filters
数组。
如果 filters
数组未定义,则无需使用临时数组。相反,您可以直接赋值包含一个或多个已创建的滤镜对象的一个数组文本值。“示例”部分的第一个示例通过使用处理已定义和未定义的 filters
数组的代码来添加投影滤镜。
要修改现有的滤镜对象,必须使用修改 filters
数组的副本的技术:
- 将
filters
数组的值分配给临时数组,例如一个名为myFilters
的数组。 - 使用临时数组
myFilters
修改属性。例如,如果要设置数组中第一个滤镜的品质属性,可以使用以下代码:myFilters[0].quality = 1;
- 将临时数组的值分配给
filters
数组。
在加载时,如果显示对象具有关联的滤镜,则将它标记为像透明位图那样缓存自身。从此时起,只要显示对象具有有效的滤镜列表,播放器就会将显示对象缓存为位图。此源位图用作滤镜效果的源图像。每个显示对象通常有两个位图:一个包含原始未过滤的源显示对象,另一个是过滤后的最终图像。呈现时使用最终图像。只要显示对象不发生更改,最终图像就不需要更新。
flash.filters 包含有滤镜类。例如,要创建 DropShadow 滤镜,请输入:
import flash.filters.DropShadowFilter var myFilter:DropShadowFilter = new DropShadowFilter (distance, angle, color, alpha, blurX, blurY, quality, inner, knockout)
您可以使用 is
运算符确定分配给 filter
数组中每个索引位置的滤镜的类型。例如,以下代码显示如何确定是 DropShadowFilter 的 filters
数组中第一个滤镜的位置:
import flash.text.TextField; import flash.filters.*; var tf:TextField = new TextField(); var filter1:DropShadowFilter = new DropShadowFilter(); var filter2:GradientGlowFilter = new GradientGlowFilter(); tf.filters = [filter1, filter2]; tf.text = "DropShadow index: " + filterPosition(tf, DropShadowFilter).toString(); // 0 addChild(tf) function filterPosition(displayObject:DisplayObject, filterClass:Class):int { for (var i:uint = 0; i < displayObject.filters.length; i++) { if (displayObject.filters[i] is filterClass) { return i; } } return -1; }
注意:由于无法直接将新滤镜对象添加到 DisplayObject.filters
数组,因此以下代码对名为 myDisplayObject
的目标显示对象不起作用:
myDisplayObject.filters.push(myDropShadow);
实现
public function get filters():Array
public function set filters(value:Array):void
引发
ArgumentError — 当 filters 包括 ShaderFilter,并且着色器输出类型与此操作不兼容时(着色器必须指定 pixel4 输出)。
| |
ArgumentError — 当 filters 包括 ShaderFilter,并且着色器未指定任何图像输入或第一个输入不是 image4 输入时。
| |
ArgumentError — 当 filters 包括 ShaderFilter,并且着色器指定了未提供的图像输入时。
| |
ArgumentError — 当 filters 包括 ShaderFilter,使用了 ByteArray 或 Vector.<Number> 实例作为着色器输入,没有为 ShaderInput 对象指定 width 和 height 属性,或者指定的值与输入数据中的数据量不匹配。有关详细信息,请参阅 ShaderInput.input 属性。
|
相关 API 元素
height | 属性 |
height:Number
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
表示显示对象的高度,以像素为单位。高度是根据显示对象内容的范围来计算的。如果您设置了 height
属性,则 scaleY
属性会相应调整,如以下代码所示:
var rect:Shape = new Shape(); rect.graphics.beginFill(0xFF0000); rect.graphics.drawRect(0, 0, 100, 100); trace(rect.scaleY) // 1; rect.height = 200; trace(rect.scaleY) // 2;
除 TextField 和 Video 对象以外,没有内容的显示对象(如一个空的 Sprite)的高度为 0,即使您尝试将 height
设置为其他值,也是这样。
实现
public function get height():Number
public function set height(value:Number):void
示例 ( 如何使用本示例 )
height
属性(基于每个对象的 textHeight
属性);此外,它还通过设置其 y
属性来定位第二个文本字段:
import flash.text.TextField; var tf1:TextField = new TextField(); tf1.text = "Text Field 1"; tf1.border = true; tf1.wordWrap = true; tf1.width = 40; tf1.height = tf1.textHeight + 5; addChild(tf1); var tf2:TextField = new TextField(); tf2.text = "Text Field 2"; tf2.border = true; tf2.wordWrap = true; tf2.width = 40; tf2.height = tf2.textHeight + 5; tf2.y = tf1.y + tf1.height + 5; addChild(tf2);
loaderInfo | 属性 |
loaderInfo:LoaderInfo
[只读] 语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
返回一个 LoaderInfo 对象,其中包含加载此显示对象所属的文件的相关信息。loaderInfo
属性仅为 SWF 文件的根显示对象或已加载的位图(而不是使用 ActionScript 绘制的位图)定义。要查找与包含名为 myDisplayObject
的显示对象的 SWF 文件相关的 loaderInfo
对象,请使用 myDisplayObject.root.loaderInfo
。
大的 SWF 文件可以通过调用 this.root.loaderInfo.addEventListener(Event.COMPLETE, func)
来监控其下载。
实现
public function get loaderInfo():LoaderInfo
相关 API 元素
示例 ( 如何使用本示例 )
this
引用显示对象。代码会输出该显示对象的根 SWF 文件的 URL:
trace (this.loaderInfo.url);
mask | 属性 |
mask:DisplayObject
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
调用显示对象被指定的 mask
对象遮罩。要确保当舞台缩放时蒙版仍然有效,mask
显示对象必须处于显示列表的活动部分。但不绘制 mask
对象本身。将 mask
设置为 null
可删除蒙版。
要能够缩放遮罩对象,它必须在显示列表中。要能够拖动蒙版 Sprite 对象(通过调用其 startDrag()
方法),它必须在显示列表中。要为基于 sprite 正在调度的 mouseDown
事件调用 startDrag()
方法,请将 sprite 的 buttonMode
属性设置为 true
。
通过将 cacheAsBitmap
属性设置为 true
,将 cacheAsBitmapMatrix
属性设置为 Matrix 对象来缓存显示对象时,遮罩对象和被遮罩的显示对象必须是同一缓存位图的一部分。因此,如果缓存显示对象,则遮罩必须是显示对象的子级。如果缓存显示列表上的显示对象的祖代,则遮罩必须是该祖代的子级或其后代之一。如果缓存遮罩对象的多个祖代,则遮罩必须是显示列表中离遮罩对象最近的缓存容器的后代。
注意:单个 mask
对象不能用于遮罩多个执行调用的显示对象。在将 mask
分配给第二个显示对象时,会撤消其作为第一个对象的遮罩,该对象的 mask
属性将变为 null
。
实现
public function get mask():DisplayObject
public function set mask(value:DisplayObject):void
示例 ( 如何使用本示例 )
drag()
事件侦听器函数会调用遮罩 Sprite 对象的 startDrag()
方法:
import flash.text.TextField; import flash.display.Sprite; import flash.events.MouseEvent; var tf:TextField = new TextField(); tf.text = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, " + "sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. " tf.selectable = false; tf.wordWrap = true; tf.width = 150; addChild(tf); var square:Sprite = new Sprite(); square.graphics.beginFill(0xFF0000); square.graphics.drawRect(0, 0, 40, 40); addChild(square); tf.mask = square; tf.addEventListener(MouseEvent.MOUSE_DOWN, drag); tf.addEventListener(MouseEvent.MOUSE_UP, noDrag); function drag(event:MouseEvent):void { square.startDrag(); } function noDrag(event:MouseEvent):void { square.stopDrag(); }
metaData | 属性 |
mouseX | 属性 |
mouseX:Number
[只读] 语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
表示此鼠标或用户输入设备位置的 x 坐标,以像素为单位。
注意:对于已旋转的 DisplayObject,返回的 x 坐标将反映未旋转的对象。
实现
public function get mouseX():Number
示例 ( 如何使用本示例 )
mouseX
和 mouseY
的位置:
import flash.display.Sprite; import flash.events.MouseEvent; var square:Sprite = new Sprite(); square.graphics.beginFill(0xFF0000); square.graphics.drawRect(0, 0, 200, 200); addChild(square); square.addEventListener(MouseEvent.CLICK, traceCoordinates); function traceCoordinates(event:MouseEvent):void { trace(square.mouseX, square.mouseY); }
mouseY | 属性 |
mouseY:Number
[只读] 语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
表示此鼠标或用户输入设备位置的 y 坐标,以像素为单位。
注意:对于已旋转的 DisplayObject,返回的 y 坐标将反映未旋转的对象。
实现
public function get mouseY():Number
示例 ( 如何使用本示例 )
mouseX
和 mouseY
的位置:
import flash.display.Sprite; import flash.events.MouseEvent; var square:Sprite = new Sprite(); square.graphics.beginFill(0xFF0000); square.graphics.drawRect(0, 0, 200, 200); addChild(square); square.addEventListener(MouseEvent.CLICK, traceCoordinates); function traceCoordinates(event:MouseEvent):void { trace(square.mouseX, square.mouseY); }
name | 属性 |
name:String
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
表示 DisplayObject 的实例名称。通过调用父显示对象容器的 getChildByName()
方法,可以在父显示对象容器的子列表中标识该对象。
实现
public function get name():String
public function set name(value:String):void
引发
IllegalOperationError — 如果尝试在 Flash 创作工具中对放置在时间轴上的对象设置此属性。
|
示例 ( 如何使用本示例 )
name
属性(当用户单击其中一个对象时):
import flash.display.Sprite; import flash.events.MouseEvent; var circle1:Sprite = new Sprite(); circle1.graphics.beginFill(0xFF0000); circle1.graphics.drawCircle(40, 40, 40); circle1.name = "circle1"; addChild(circle1); circle1.addEventListener(MouseEvent.CLICK, traceName); var circle2:Sprite = new Sprite(); circle2.graphics.beginFill(0x0000FF); circle2.graphics.drawCircle(140, 40, 40); circle2.name = "circle2"; addChild(circle2); circle2.addEventListener(MouseEvent.CLICK, traceName); function traceName(event:MouseEvent):void { trace(event.target.name); }
opaqueBackground | 属性 |
opaqueBackground:Object
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
指定显示对象是否由于具有某种背景颜色而不透明。透明的位图包含 Alpha 通道数据,并以透明的方式进行绘制。不透明位图没有 Alpha 通道(呈现速度比透明位图快)。如果位图是不透明的,则您可以指定要使用的其自己的背景颜色。
如果设置为某个数值,则表面是不透明的,并且带有该数值指定的 RGB 背景颜色。如果设置为 null
(默认值),则显示对象将有透明背景。
opaqueBackground
属性主要与 cacheAsBitmap
属性一起使用,以优化呈现。对于 cacheAsBitmap
属性设置为 true 的显示对象,设置 opaqueBackground
可以提高呈现性能。
如果在 shapeFlag
参数设置为 true
时调用 hitTestPoint()
方法,则不透明的背景区域不 匹配。
不透明背景区域不响应鼠标事件。
实现
public function get opaqueBackground():Object
public function set opaqueBackground(value:Object):void
相关 API 元素
示例 ( 如何使用本示例 )
opaqueBackground
属性设置为红色 (0xFF0000):
import flash.display.Shape; var circle:Shape = new Shape(); circle.graphics.beginFill(0x0000FF); circle.graphics.drawCircle(40, 40, 40); circle.opaqueBackground = 0xFF0000; addChild(circle);
parent | 属性 |
parent:DisplayObjectContainer
[只读] 语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
表示包含此显示对象的 DisplayObjectContainer 对象。使用 parent
属性可以指定高于显示列表层次结构中当前显示对象的显示对象的相对路径。
可以使用 parent
在显示列表中上移多个级别,如下所示:
this.parent.parent.alpha = 20;
实现
public function get parent():DisplayObjectContainer
引发
SecurityError — 父显示对象属于您无权访问的安全沙箱。通过让父影片调用 Security.allowDomain() 方法,可以避免发生这种情况。
|
示例 ( 如何使用本示例 )
parent
属性如何反映显示列表层次结构:
import flash.display.Sprite; var sprite1:Sprite = new Sprite(); sprite1.name = "sprite1"; var sprite2:Sprite = new Sprite(); sprite2.name = "sprite2"; var sprite3:Sprite = new Sprite(); sprite3.name = "sprite3"; sprite1.addChild(sprite2); sprite2.addChild(sprite3); trace(sprite2.parent.name); // sprite1 trace(sprite3.parent.name); // sprite2 trace(sprite3.parent.parent.name); // sprite1
root | 属性 |
root:DisplayObject
[只读] 语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
对于加载的 SWF 文件中的显示对象,root
属性是此 SWF 文件所表示的显示列表树结构部分中的顶级显示对象。对于代表已加载图像文件的位图对象,root
属性就是位图对象本身。对于第一个加载的 SWF 文件的主类的实例,root
属性就是显示对象本身。Stage 对象的 root
属性是 Stage 对象本身。对于任何未添加到显示列表的显示对象,root
属性设置为 null
,除非它已添加到符合以下条件的显示对象容器:不在显示列表中,但属于已加载 SWF 文件中顶级显示对象的子级。
例如,如果您通过调用 Sprite()
构造函数方法创建新的 Sprite 对象,则其 root
属性将为 null
,除非您将其添加到显示列表中(或添加到不在显示列表中但属于 SWF 文件中顶级显示对象的子级的显示对象容器中)。
对于加载的 SWF 文件,即使用于加载文件的 Loader 对象未在显示列表中,SWF 文件中的顶级显示对象也会为其本身设置 root
属性。在 Loader 对象添加为对其设置 root
属性的显示对象的子级前,它不会设置自己的 root
属性。
实现
public function get root():DisplayObject
示例 ( 如何使用本示例 )
root
属性之间的差异:
import flash.display.Loader; import flash.net.URLRequest; import flash.events.Event; trace(stage.root); // [object Stage] var ldr:Loader = new Loader(); trace (ldr.root); // null addChild(ldr); trace (ldr.root); // [object ...] var urlReq:URLRequest = new URLRequest("example.jpg"); ldr.load(urlReq); ldr.contentLoaderInfo.addEventListener(Event.COMPLETE, loaded); function loaded(event:Event):void { trace(ldr.content.root); // [object Bitmap] }
rotation | 属性 |
rotation:Number
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
表示 DisplayObject 实例距其原始方向的旋转程度,以度为单位。从 0 到 180 的值表示顺时针方向旋转;从 0 到 -180 的值表示逆时针方向旋转。对于此范围之外的值,可以通过加上或减去 360 获得该范围内的值。例如,my_video.rotation = 450
语句与 my_video.rotation = 90
是相同的。
实现
public function get rotation():Number
public function set rotation(value:Number):void
示例 ( 如何使用本示例 )
import flash.display.Sprite; import flash.events.MouseEvent; var square:Sprite = new Sprite(); square.graphics.beginFill(0xFFCC00); square.graphics.drawRect(-50, -50, 100, 100); square.x = 150; square.y = 150; addChild(square); square.addEventListener(MouseEvent.CLICK, rotate); function rotate(event:MouseEvent):void { square.rotation += 15; }
rotationX | 属性 |
rotationX:Number
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5, Flash Lite 4 |
表示 DisplayObject 实例相对于 3D 父容器距离其原始方向的 x 轴旋转(以度为单位)。从 0 到 180 的值表示顺时针方向旋转;从 0 到 -180 的值表示逆时针方向旋转。对于此范围之外的值,可以通过加上或减去 360 获得该范围内的值。
实现
public function get rotationX():Number
public function set rotationX(value:Number):void
示例 ( 如何使用本示例 )
rotationX
和 rotationY
属性进行旋转。第一个椭圆的注册点设置为椭圆的中心点。它围绕自身进行旋转。第二个椭圆围绕一个外部点进行旋转。
package { import flash.display.MovieClip; import flash.display.Shape; import flash.geom.*; import flash.display.Graphics; import flash.events.TimerEvent; import flash.utils.Timer; public class RotationExample1 extends MovieClip { private var ellipse:Shape = new Shape(); private var speed:int = 10; private var ellipse1:Shape; private var ellipse2:Shape; public function RotationExample1():void { ellipse1 = drawEllipse(-50, -40, (this.stage.stageWidth / 2), (this.stage.stageHeight / 2)); ellipse2 = drawEllipse(30, 40, (this.stage.stageWidth / 2), (this.stage.stageHeight / 2)); this.addChild(ellipse1); this.addChild(ellipse2); var t:Timer = new Timer(50); t.addEventListener(TimerEvent.TIMER, timerHandler); t.start(); } private function drawEllipse(x1, y1, x2, y2):Shape { var e:Shape = new Shape(); e.graphics.beginFill(0xFF0000); e.graphics.lineStyle(2); e.graphics.drawEllipse(x1, y1, 100, 80); e.graphics.endFill(); e.x = x2; e.y = y2; e.z = 1; return e; } private function timerHandler(event:TimerEvent):void { ellipse1.rotationY += speed; ellipse1.rotationX -= speed; ellipse2.rotationY += speed; ellipse2.rotationX -= speed; } } }
//Requires: // - Slider control UI component in Flash library. // - Publish for Flash Player 10. // [SWF(width="400", height="300")] import fl.controls.Slider; import fl.controls.SliderDirection; import fl.events.SliderEvent; var slider:Slider = new Slider(); slider.direction = SliderDirection.HORIZONTAL; slider.minimum = 0; slider.maximum = 360; slider.value = 45; slider.tickInterval = 45; slider.snapInterval = 1; slider.liveDragging = true; slider.addEventListener(SliderEvent.CHANGE, slider_change); slider.move(10, 10); addChild(slider); var spr:Sprite = new Sprite(); spr.graphics.lineStyle(2, 0xFF0000); spr.graphics.drawRect(0, 0, 100, 80); spr.x = Math.round((stage.stageWidth - spr.width)/2); spr.y = Math.round((stage.stageHeight - spr.height)/2); spr.rotationX = 45; addChild(spr); function slider_change(evt:SliderEvent):void { spr.rotationX = evt.value; }
rotationY | 属性 |
rotationY:Number
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5, Flash Lite 4 |
表示 DisplayObject 实例相对于 3D 父容器距离其原始方向的 y 轴旋转(以度为单位)。从 0 到 180 的值表示顺时针方向旋转;从 0 到 -180 的值表示逆时针方向旋转。对于此范围之外的值,可以通过加上或减去 360 获得该范围内的值。
实现
public function get rotationY():Number
public function set rotationY(value:Number):void
示例 ( 如何使用本示例 )
rotationX
和 rotationY
属性进行旋转。第一个椭圆的注册点设置为椭圆的中心点。它围绕自身进行旋转。第二个椭圆围绕一个外部点进行旋转。
package { import flash.display.MovieClip; import flash.display.Shape; import flash.geom.*; import flash.display.Graphics; import flash.events.TimerEvent; import flash.utils.Timer; public class RotationExample1 extends MovieClip { private var ellipse:Shape = new Shape(); private var speed:int = 10; private var ellipse1:Shape; private var ellipse2:Shape; public function RotationExample1():void { ellipse1 = drawEllipse(-50, -40, (this.stage.stageWidth / 2), (this.stage.stageHeight / 2)); ellipse2 = drawEllipse(30, 40, (this.stage.stageWidth / 2), (this.stage.stageHeight / 2)); this.addChild(ellipse1); this.addChild(ellipse2); var t:Timer = new Timer(50); t.addEventListener(TimerEvent.TIMER, timerHandler); t.start(); } private function drawEllipse(x1, y1, x2, y2):Shape { var e:Shape = new Shape(); e.graphics.beginFill(0xFF0000); e.graphics.lineStyle(2); e.graphics.drawEllipse(x1, y1, 100, 80); e.graphics.endFill(); e.x = x2; e.y = y2; e.z = 1; return e; } private function timerHandler(event:TimerEvent):void { ellipse1.rotationY += speed; ellipse1.rotationX -= speed; ellipse2.rotationY += speed; ellipse2.rotationX -= speed; } } }
rotationZ | 属性 |
rotationZ:Number
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5, Flash Lite 4 |
表示 DisplayObject 实例相对于 3D 父容器距离其原始方向的 z 轴旋转(以度为单位)。从 0 到 180 的值表示顺时针方向旋转;从 0 到 -180 的值表示逆时针方向旋转。对于此范围之外的值,可以通过加上或减去 360 获得该范围内的值。
实现
public function get rotationZ():Number
public function set rotationZ(value:Number):void
scale9Grid | 属性 |
scale9Grid:Rectangle
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
当前有效的缩放网格。如果设置为 null
,则在应用任何缩放转换时,将正常缩放整个显示对象。
当定义 scale9Grid
属性时,该显示对象被分割到以 scale9Grid
矩形为基础的具有九个区域的网格中,该矩形定义网格的中心区域。网格的其他八个区域如下所示:
- 矩形外的左上角
- 矩形上方的区域
- 矩形外的右上角
- 矩形左侧的区域
- 矩形右侧的区域
- 矩形外的左下角
- 矩形下方的区域
- 矩形外的右下角
可以认为中心区域(由矩形定义)之外的八个区域类似于在缩放时已应用特殊规则的图片帧。
在设置 scale9Grid
属性并缩放显示对象后,会正常缩放所有文本和渐变;但是,对于其他类型的对象,将应用以下规则:
- 正常缩放中心区域中的内容。
- 不缩放转角中的内容。
- 仅水平缩放顶部和底部区域中的内容。仅垂直缩放左侧和右侧区域中的内容。
- 拉伸所有填充(包括位图、视频和渐变)以适应其形状。
如果旋转显示对象,则所有后续缩放都是正常的(并会忽略 scale9Grid
属性)。
例如,请考虑以下显示对象和作为该显示对象的 scale9Grid
属性应用的矩形:
显示对象。 |
红色矩形显示 |
缩放或拉伸显示对象时,矩形内的对象正常缩放,但是矩形外的对象则按照 scale9Grid
规则进行缩放:
缩放到 75%: | |
缩放到 50%: | |
缩放到 25%: | |
水平拉伸 150%: |
设置 scale9Grid
的常见用法是设置用作组件的显示对象,当缩放该组件时,其中的边缘区域保持相同的宽度。
实现
public function get scale9Grid():Rectangle
public function set scale9Grid(value:Rectangle):void
引发
ArgumentError — 如果向方法传递的参数无效。
|
相关 API 元素
示例 ( 如何使用本示例 )
graphics
属性绘制一个矩形。该矩形将一个 20 像素宽的线条作为边框,并且用渐变填充。该 timer 事件调用 scale()
函数,该函数通过调整 scaleX
和 scaleY
属性来缩放 Shape 对象。应用于 Shape 对象的 scale9Grid
会阻止缩放矩形的边框线,而只缩放渐变填充:
import flash.display.Shape; import flash.display.GradientType; import flash.display.SpreadMethod; import flash.display.InterpolationMethod; import flash.geom.Matrix; import flash.geom.Rectangle; import flash.utils.Timer; import flash.events.TimerEvent; var square:Shape = new Shape(); square.graphics.lineStyle(20, 0xFFCC00); var gradientMatrix:Matrix = new Matrix(); gradientMatrix.createGradientBox(15, 15, Math.PI, 10, 10); square.graphics.beginGradientFill(GradientType.RADIAL, [0xffff00, 0x0000ff], [100, 100], [0, 0xFF], gradientMatrix, SpreadMethod.REFLECT, InterpolationMethod.RGB, 0.9); square.graphics.drawRect(0, 0, 100, 100); var grid:Rectangle = new Rectangle(20, 20, 60, 60); square.scale9Grid = grid ; addChild(square); var tim:Timer = new Timer(100); tim.start(); tim.addEventListener(TimerEvent.TIMER, scale); var scaleFactor:Number = 1.01; function scale(event:TimerEvent):void { square.scaleX *= scaleFactor; square.scaleY *= scaleFactor; if (square.scaleX > 2.0) { scaleFactor = 0.99; } if (square.scaleX < 1.0) { scaleFactor = 1.01; } }
scaleX | 属性 |
scaleX:Number
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
表示从注册点开始应用的对象的水平缩放比例(百分比)。默认注册点为 (0,0)。1.0 等于 100% 缩放。
缩放本地坐标系统将更改 x
和 y
属性值,这些属性值是以整像素定义的。
实现
public function get scaleX():Number
public function set scaleX(value:Number):void
示例 ( 如何使用本示例 )
graphics
属性绘制一个矩形。当用户单击该 Sprite 对象时,它将按 10% 的比例进行缩放:
import flash.display.Sprite; import flash.events.MouseEvent; var square:Sprite = new Sprite(); square.graphics.beginFill(0xFFCC00); square.graphics.drawRect(0, 0, 100, 100); addChild(square); square.addEventListener(MouseEvent.CLICK, scale); function scale(event:MouseEvent):void { square.scaleX *= 1.10; square.scaleY *= 1.10; }
scaleY | 属性 |
scaleY:Number
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
表示从对象注册点开始应用的对象的垂直缩放比例(百分比)。默认注册点为 (0,0)。1.0 是 100% 缩放。
缩放本地坐标系统将更改 x
和 y
属性值,这些属性值是以整像素定义的。
实现
public function get scaleY():Number
public function set scaleY(value:Number):void
示例 ( 如何使用本示例 )
graphics
属性绘制一个矩形。当用户单击该 Sprite 对象时,它将按 10% 的比例进行缩放:
import flash.display.Sprite; import flash.events.MouseEvent; var square:Sprite = new Sprite(); square.graphics.beginFill(0xFFCC00); square.graphics.drawRect(0, 0, 100, 100); addChild(square); square.addEventListener(MouseEvent.CLICK, scale); function scale(event:MouseEvent):void { square.scaleX *= 1.10; square.scaleY *= 1.10; }
scaleZ | 属性 |
scrollRect | 属性 |
scrollRect:Rectangle
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9 |
显示对象的滚动矩形范围。显示对象被裁切为矩形定义的大小,当您更改 scrollRect
对象的 x
和 y
属性时,它会在矩形内滚动。
scrollRect
Rectangle 对象的属性使用显示对象的坐标空间,并缩放到像整个显示对象一样。滚动显示对象上已裁切窗口的转角范围是显示对象的原点 (0,0) 和矩形的宽度和高度定义的点。它们不按原点居中,而是使用原点定义区域的左上角。滚动的显示对象始终以整像素为增量进行滚动。
您可以通过设置 scrollRect
Rectangle 对象的 x
属性来左右滚动对象, 还可以通过设置 scrollRect
对象的 y
属性来上下滚动对象。如果显示对象旋转了 90 度,并且您左右滚动它,则实际上显示对象会上下滚动。
请注意,仅会在渲染对象时处理 scrollRect
属性的更改。因此,如果在修改 scrollRect
方法后立即调用类似 localToGlobal
这样的方法,则该方法可能不会产生预期的结果。
注意:从 Flash Player 11.4/AIR 3.4 开始,矩形的宽度或高度如为负值,系统会将其改为 0。
实现
public function get scrollRect():Rectangle
public function set scrollRect(value:Rectangle):void
相关 API 元素
示例 ( 如何使用本示例 )
scrollRect
属性如何为显示对象 circle
定义滚动区域。单击 circle
对象时,clicked()
事件处理函数方法会调整 circle
对象 scrollRect
属性的 y
属性,从而使对象向下滚动:
import flash.display.Sprite; import flash.geom.Rectangle; import flash.events.MouseEvent; var circle:Sprite = new Sprite(); circle.graphics.beginFill(0xFFCC00); circle.graphics.drawCircle(200, 200, 200); circle.scrollRect = new Rectangle(0, 0, 200, 200); addChild(circle); circle.addEventListener(MouseEvent.CLICK, clicked); function clicked(event:MouseEvent):void { var rect:Rectangle = event.target.scrollRect; rect.y -= 5; event.target.scrollRect = rect; }
stage | 属性 |
stage:Stage
[只读] 语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
显示对象的舞台。Flash 运行时应用程序仅包含一个 Stage 对象。例如,您可以创建多个显示对象并加载到显示列表中,每个显示对象的 stage
属性是指相同的 Stage 对象(即使显示对象属于已加载的 SWF 文件)。
如果显示对象未添加到显示列表,则其 stage
属性会设置为 null
。
实现
public function get stage():Stage
示例 ( 如何使用本示例 )
width
属性来定位文本字段:
import flash.text.TextField; var tf1:TextField = new TextField(); tf1.text = "Text Field 1"; tf1.border = true; tf1.x = 10; addChild(tf1); tf1.width = tf1.stage.stageWidth / 2 - 10; var tf2:TextField = new TextField(); tf2.text = "Text Field 2"; tf2.border = true; tf2.x = tf1.x + tf1.width + 5; addChild(tf2); tf2.width = tf2.stage.stageWidth / 2 - 10; trace(stage.stageWidth);
transform | 属性 |
transform:flash.geom:Transform
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
一个对象,具有与显示对象的矩阵、颜色转换和像素范围有关的属性。在 Transform 类的条目中对特定属性 matrix、colorTransform 和三个只读属性(concatenatedMatrix
、concatenatedColorTransform
和 pixelBounds
)进行了说明。
transform 对象的每个属性本身都是一个对象。此概念很重要,因为设置 matrix 或 colorTransform 对象的新值的唯一方法是,创建新对象并将该对象复制到 transform.matrix 或 transform.colorTransform 属性。
例如,要增加显示对象矩阵的 tx
值,您必须制作整个矩阵对象的副本,然后将新对象复制到 transform 对象的 matrix 属性中:
var myMatrix:Matrix = myDisplayObject.transform.matrix;
myMatrix.tx += 10;
myDisplayObject.transform.matrix = myMatrix;
不能直接设置 tx
属性。下面的代码对 myDisplayObject
不起作用:
myDisplayObject.transform.matrix.tx += 10;
您也可以复制整个 transform 对象并为其赋予另一个显示对象的 transform 属性。例如,下面的代码将整个 transform 对象从 myOldDisplayObj
复制到 myNewDisplayObj
:
myNewDisplayObj.transform = myOldDisplayObj.transform;
现在,新显示对象 myNewDisplayObj
与旧显示对象 myOldDisplayObj
具有相同的矩阵、颜色转换和像素范围值。
请注意,AIR for TV 设备使用硬件加速(如果可用)进行颜色转换。
实现
public function get transform():flash.geom:Transform
public function set transform(value:flash.geom:Transform):void
相关 API 元素
示例 ( 如何使用本示例 )
square
Sprite 对象。当用户单击 Sprite 时,transformer()
方法会调整 Sprite transform
属性的 colorTransform
和 matrix
属性:
import flash.display.Sprite; import flash.geom.ColorTransform; import flash.geom.Matrix; import flash.geom.Transform; import flash.events.MouseEvent; var square:Sprite = new Sprite(); square.graphics.lineStyle(20, 0xFF2200); square.graphics.beginFill(0x0000DD); square.graphics.drawRect(0, 0, 100, 100); addChild(square); var resultColorTransform:ColorTransform = new ColorTransform(); resultColorTransform.alphaMultiplier = 0.5; resultColorTransform.redOffset = 155; resultColorTransform.greenMultiplier = 0.5; var skewMatrix:Matrix = new Matrix(1, 1, 0, 1); square.addEventListener(MouseEvent.CLICK, transformer); function transformer(event:MouseEvent):void { var transformation:Transform = square.transform; var tempMatrix:Matrix = square.transform.matrix; tempMatrix.concat(skewMatrix); square.transform.colorTransform = resultColorTransform; square.transform.matrix = tempMatrix; }
visible | 属性 |
visible:Boolean
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
显示对象是否可见。不可见的显示对象已被禁用。例如,如果 InteractiveObject 实例的 visible=false
,则无法单击该对象。
实现
public function get visible():Boolean
public function set visible(value:Boolean):void
示例 ( 如何使用本示例 )
visible
属性的函数,从而会产生闪烁的效果:
import flash.text.TextField; import flash.utils.Timer; import flash.events.TimerEvent; var tf:TextField = new TextField(); tf.text = "Hello."; addChild(tf); var tim:Timer = new Timer(250); tim.start(); tim.addEventListener(TimerEvent.TIMER, blinker); function blinker(event:TimerEvent):void { tf.visible = !tf.visible; }
width | 属性 |
width:Number
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
表示显示对象的宽度,以像素为单位。宽度是根据显示对象内容的范围来计算的。如果您设置了 width
属性,则 scaleX
属性会相应调整,如以下代码所示:
var rect:Shape = new Shape(); rect.graphics.beginFill(0xFF0000); rect.graphics.drawRect(0, 0, 100, 100); trace(rect.scaleX) // 1; rect.width = 200; trace(rect.scaleX) // 2;
除 TextField 和 Video 对象以外,没有内容的显示对象(如一个空的 Sprite)的宽度为 0,即使您尝试将 width
设置为其他值,也是这样。
实现
public function get width():Number
public function set width(value:Number):void
示例 ( 如何使用本示例 )
square
Sprite 对象。当用户单击 Sprite 时,widen()
方法会增加 Sprite 的 width
属性:
import flash.display.Sprite; import flash.events.MouseEvent; var square:Sprite = new Sprite(); square.graphics.beginFill(0xFF0000); square.graphics.drawRect(0, 0, 100, 100); addChild(square); square.addEventListener(MouseEvent.CLICK, widen); function widen(event:MouseEvent):void { square.width += 10; }
x | 属性 |
x:Number
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
表示 DisplayObject 实例相对于父级 DisplayObjectContainer 本地坐标的 x 坐标。如果该对象位于具有变形的 DisplayObjectContainer 内,则它也位于包含 DisplayObjectContainer 的本地坐标系中。因此,对于逆时针旋转 90 度的 DisplayObjectContainer,该 DisplayObjectContainer 的子级将继承逆时针旋转 90 度的坐标系。对象的坐标指的是注册点的位置。
实现
public function get x():Number
public function set x(value:Number):void
示例 ( 如何使用本示例 )
circle
Sprite 对象。Timer 对象用于每 50 毫秒更改一次 Sprite 的 x
属性:
import flash.display.Sprite; import flash.utils.Timer; import flash.events.TimerEvent; var circle:Sprite = new Sprite(); circle.graphics.beginFill(0xFF0000); circle.graphics.drawCircle(100, 100, 100); addChild(circle); var tim:Timer = new Timer(50); tim.start(); tim.addEventListener(TimerEvent.TIMER, bounce); var xInc:Number = 2; function bounce(event:TimerEvent):void { circle.x += xInc; if (circle.x > circle.width) { xInc = -2; } if (circle.x < 0) { xInc = 2; } }
y | 属性 |
y:Number
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
表示 DisplayObject 实例相对于父级 DisplayObjectContainer 本地坐标的 y 坐标。如果该对象位于具有变形的 DisplayObjectContainer 内,则它也位于包含 DisplayObjectContainer 的本地坐标系中。因此,对于逆时针旋转 90 度的 DisplayObjectContainer,该 DisplayObjectContainer 的子级将继承逆时针旋转 90 度的坐标系。对象的坐标指的是注册点的位置。
实现
public function get y():Number
public function set y(value:Number):void
示例 ( 如何使用本示例 )
height
属性(基于每个对象的 textHeight
属性);此外,它还通过设置其 y
属性来定位第二个文本字段:
import flash.text.TextField; var tf1:TextField = new TextField(); tf1.text = "Text Field 1"; tf1.border = true; tf1.wordWrap = true; tf1.width = 40; tf1.height = tf1.textHeight + 5; addChild(tf1); var tf2:TextField = new TextField(); tf2.text = "Text Field 2"; tf2.border = true; tf2.wordWrap = true; tf2.width = 40; tf2.height = tf2.textHeight + 5; tf2.y = tf1.y + tf1.height + 5; addChild(tf2);
z | 属性 |
z:Number
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5 |
表示 DisplayObject 实例相对于 3D 父容器沿 z 轴的 z 坐标位置。z 属性用于 3D 坐标,而不是屏幕坐标或像素坐标。
当您将显示对象的 z
属性设置为默认值 0
之外的其他值时,将自动创建一个相对应的 Matrix3D 对象,以便调整显示对象在三维中的位置和方向。在使用 z 轴时,x 和 y 属性的现有行为将从屏幕坐标或像素坐标更改为相对于 3D 父容器的位置。
例如,位于 x = 100、y = 100、z = 200 位置的 _root
的子级不在像素位置 (100,100) 处进行绘制。将在 3D 投影计算将其所置之处绘制该子级。计算方法为:
(x*cameraFocalLength/cameraRelativeZPosition, y*cameraFocalLength/cameraRelativeZPosition)
实现
public function get z():Number
public function set z(value:Number):void
相关 API 元素
示例 ( 如何使用本示例 )
z
轴上下移动)。一个椭圆设置的移动速度要快于另一个。
package { import flash.display.MovieClip; import flash.display.Shape; import flash.display.Graphics; import flash.events.Event; import flash.geom.*; public class ZAxisExample1 extends MovieClip { private var ellipse1Back:int = 1; private var ellipse2Back:int = 1; private var depth:int = 1000; public function ZAxisExample1():void { var ellipse1 = drawEllipse((this.stage.stageWidth / 2) - 100, (this.stage.stageHeight / 2), 100, 80, 10); var ellipse2 = drawEllipse((this.stage.stageWidth / 2) + 100, (this.stage.stageHeight / 2), 100, 80, 300); this.addChild(ellipse1); this.addChild(ellipse2); ellipse1.addEventListener(Event.ENTER_FRAME, ellipse1FrameHandler); ellipse2.addEventListener(Event.ENTER_FRAME, ellipse2FrameHandler); } private function drawEllipse(x:Number, y:Number, w:Number, h:Number, z:Number):Shape { var s:Shape = new Shape(); s.z = z; s.graphics.beginFill(0xFF0000); s.graphics.lineStyle(2); s.graphics.drawEllipse(x, y, w, h); s.graphics.endFill(); return s; } private function ellipse1FrameHandler(e:Event):void { ellipse1Back = setDepth(e, ellipse1Back); e.currentTarget.z += ellipse1Back * 10; } private function ellipse2FrameHandler(e:Event):void { ellipse2Back = setDepth(e, ellipse2Back); e.currentTarget.z += ellipse2Back * 20; } private function setDepth(e:Event, d:int):int { if(e.currentTarget.z > depth) { e.currentTarget.z = depth; d = -1; }else if (e.currentTarget.z < 0) { e.currentTarget.z = 0; d = 1; } return d; } } }
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) trace(contents.getBounds(this)); // (x=0, y=0, w=200, h=200)
请注意:使用 localToGlobal()
和 globalToLocal()
方法可以分别将显示对象的本地坐标转换为显示坐标,或将显示坐标转换为本地坐标。
getBounds()
方法与 getRect()
方法类似;但是 getBounds()
方法返回的矩形包括形状的所有笔触,然而 getRect()
方法返回的矩形则不包括。例如,请参阅 getRect()
方法的说明。
参数
targetCoordinateSpace:DisplayObject — 定义要使用的坐标系的显示对象。
|
Rectangle — 定义与 targetCoordinateSpace 对象坐标系统相关的显示对象面积的矩形。
|
相关 API 元素
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 对象坐标系统相关的显示对象面积的矩形。
|
相关 API 元素
示例 ( 如何使用本示例 )
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) trace(triangle.getRect(this)); // (x=0, y=0, w=100, h=100)
globalToLocal | () | 方法 |
public function globalToLocal(point:Point):Point
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
将 point
对象从舞台(全局)坐标转换为显示对象的(本地)坐标。
要使用此方法,请先创建 Point 类的一个实例。您分配的 x 和 y 值表示全局坐标,因为它们是相对于主显示区域的原点 (0,0) 的。然后将 Point 实例作为参数传递给 globalToLocal()
方法。该方法会返回一个新的 Point 对象,该对象具有相对于显示对象原点(而不是舞台原点)的 x 和 y 值。
参数
point:Point — 用 Point 类创建的对象。 该 Point 对象指定 x 和 y 坐标作为属性。
|
Point — 具有相对于显示对象的坐标的 Point 对象。
|
相关 API 元素
示例 ( 如何使用本示例 )
hitTestPoint()
方法的结果。globalToLocal()
方法将点从 Stage 坐标转换到该形状的坐标空间:
import flash.display.Shape; import flash.geom.Point; var circle:Shape = new Shape(); circle.graphics.beginFill(0x0000FF); circle.graphics.drawCircle(40, 40, 40); circle.x = 10; addChild(circle); var point1:Point = new Point(0, 0); trace(circle.hitTestPoint(point1.x, point1.y, true)); // false trace(circle.hitTestPoint(point1.x, point1.y, false)); // false trace(circle.globalToLocal(point1)); // [x=-10, y=0] var point2:Point = new Point(10, 1); trace(circle.hitTestPoint(point2.x, point2.y, true)); // false trace(circle.hitTestPoint(point2.x, point2.y, false)); // true trace(circle.globalToLocal(point2)); // [x=0, y=1] var point3:Point = new Point(30, 20); trace(circle.hitTestPoint(point3.x, point3.y, true)); // true trace(circle.hitTestPoint(point3.x, point3.y, false)); // true trace(circle.globalToLocal(point3)); // [x=20, y=20]
globalToLocal3D | () | 方法 |
public function globalToLocal3D(point:Point):Vector3D
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5, Flash Lite 4 |
将二维点从舞台(全局)坐标转换为三维显示对象的(本地)坐标。
要使用此方法,请先创建 Point 类的一个实例。分配给 Point 对象的 x 和 y 值表示全局坐标,原因是这些坐标相对于主显示区域的原点 (0,0)。然后,将 Point 对象作为 point
参数传递给 globalToLocal3D()
方法。该方法会以一个 Vector3D 对象的形式返回三维坐标,该对象包含相对于三维显示对象的原点的 x
、y
和 z
值。
参数
point:Point — 表示全局 x 坐标和 y 坐标的二维 Point 对象。
|
Vector3D — 具有相对于三维显示对象的坐标的 Vector3D 对象。
|
hitTestObject | () | 方法 |
public function hitTestObject(obj:DisplayObject):Boolean
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
计算显示对象的边框,以确定它是否与 obj
显示对象的边框重叠或相交。
参数
obj:DisplayObject — 要测试的显示对象。
|
Boolean — 如果显示对象的边框相交,则为 true ;否则为 false 。
|
示例 ( 如何使用本示例 )
hitTestObject()
方法的结果。请注意,尽管 circle2 和 circle3 并未重叠,但它们的边框重叠。因此,circle2 和 circle3 的点击测试返回 true
。
import flash.display.Shape; var circle1:Shape = new Shape(); circle1.graphics.beginFill(0x0000FF); circle1.graphics.drawCircle(40, 40, 40); addChild(circle1); var circle2:Shape = new Shape(); circle2.graphics.beginFill(0x00FF00); circle2.graphics.drawCircle(40, 40, 40); circle2.x = 50; addChild(circle2); var circle3:Shape = new Shape(); circle3.graphics.beginFill(0xFF0000); circle3.graphics.drawCircle(40, 40, 40); circle3.x = 100; circle3.y = 67; addChild(circle3); trace(circle1.hitTestObject(circle2)); // true trace(circle1.hitTestObject(circle3)); // false trace(circle2.hitTestObject(circle3)); // true
hitTestPoint | () | 方法 |
public function hitTestPoint(x:Number, y:Number, shapeFlag:Boolean = false):Boolean
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
计算显示对象,以确定它是否与 x
和 y
参数指定的点重叠或相交。x
和 y
参数指定舞台的坐标空间中的点,而不是包含显示对象的显示对象容器中的点(除非显示对象容器是舞台)。
参数
x:Number — 要测试的此对象的 x 坐标。
| |
y:Number — 要测试的此对象的 y 坐标。
| |
shapeFlag:Boolean (default = false ) — 是检查对象 (true ) 的实际像素,还是检查边框 (false ) 的实际像素。
|
Boolean — 如果显示对象与指定的点重叠或相交,则为 true ;否则为 false 。
|
相关 API 元素
示例 ( 如何使用本示例 )
hitTestPoint()
方法的结果。globalToLocal()
方法将点从 Stage 坐标转换到该形状的坐标空间:
import flash.display.Shape; import flash.geom.Point; var circle:Shape = new Shape(); circle.graphics.beginFill(0x0000FF); circle.graphics.drawCircle(40, 40, 40); circle.x = 10; addChild(circle); var point1:Point = new Point(0, 0); trace(circle.hitTestPoint(point1.x, point1.y, true)); // false trace(circle.hitTestPoint(point1.x, point1.y, false)); // false trace(circle.globalToLocal(point1)); // [x=-10, y=0] var point2:Point = new Point(10, 1); trace(circle.hitTestPoint(point2.x, point2.y, true)); // false trace(circle.hitTestPoint(point2.x, point2.y, false)); // true trace(circle.globalToLocal(point2)); // [x=0, y=1] var point3:Point = new Point(30, 20); trace(circle.hitTestPoint(point3.x, point3.y, true)); // true trace(circle.hitTestPoint(point3.x, point3.y, false)); // true trace(circle.globalToLocal(point3)); // [x=20, y=20]
local3DToGlobal | () | 方法 |
public function local3DToGlobal(point3d:Vector3D):Point
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 1.5, Flash Lite 4 |
将三维显示对象的(本地)坐标的三维点转换为舞台(全局)坐标中的二维点。
例如,您只能使用二维坐标 (x,y) 来通过 display.Graphics
方法进行绘制。要绘制三维对象,您需要将显示对象的三维坐标映射到二维坐标。首先,创建一个保存三维显示对象的 x、y 和 z 坐标的 Vector3D 类的实例。然后,将 Vector3D 对象作为 point3d
参数传递给 local3DToGlobal()
方法。该方法会返回一个二维的 Point 对象,可将该对象与图形 API 一起使用来绘制三维对象。
参数
point3d:Vector3D — 一个包含三维点或三维显示对象的坐标的 Vector3D 对象。
|
Point — 一个表示二维空间中的三维点的二维点。
|
示例 ( 如何使用本示例 )
display.Graphics
方法在二维空间中绘制简单的三维立方体。由于 this
显示对象的位置是偏移位置,因此立方体的注册点将位于其中心。Vector3D 对象的矢量保存立方体的三维坐标。首先绘制立方体的顶部,再绘制底部,然后将顶部的四个角与底部的四个角相连。您需要在绘制立方体之前先将其添加到显示对象容器中,这样才能使用 local3DToGlobal()
方法。
package { import flash.display.MovieClip; import flash.display.Sprite; import flash.display.Graphics; import flash.geom.*; public class Local3DToGlobalExample extends MovieClip { private var myCube:Sprite = new Sprite(); private var v8:Vector.<Vector3D> = new Vector.<Vector3D>(8); public function Local3DToGlobalExample():void { this.x = -(this.stage.stageWidth / 2); this.y = -(this.stage.stageWidth / 2); v8[0] = new Vector3D(-40,-40,-40); v8[1] = new Vector3D(40,-40,-40); v8[2] = new Vector3D(40,-40,40); v8[3] = new Vector3D(-40,-40,40); v8[4] = new Vector3D(-40,100,-40); v8[5] = new Vector3D(40,100,-40); v8[6] = new Vector3D(40,100,40); v8[7] = new Vector3D(-40,100,40); myCube.x = (this.stage.stageWidth / 2); myCube.y = (this.stage.stageWidth / 2); myCube.z = 1; addChild(myCube); Cube(); } private function Cube():void { var ps:Point = new Point(0,0); myCube.graphics.lineStyle(2,0xFF0000); ps = myCube.local3DToGlobal(v8[0]); myCube.graphics.moveTo(ps.x, ps.y); ps = myCube.local3DToGlobal(v8[1]); myCube.graphics.lineTo(ps.x, ps.y); ps = myCube.local3DToGlobal(v8[2]); myCube.graphics.lineTo(ps.x, ps.y); ps = myCube.local3DToGlobal(v8[3]); myCube.graphics.lineTo(ps.x, ps.y); ps = myCube.local3DToGlobal(v8[0]); myCube.graphics.lineTo(ps.x, ps.y); ps = myCube.local3DToGlobal(v8[4]); myCube.graphics.moveTo(ps.x, ps.y); ps = myCube.local3DToGlobal(v8[5]); myCube.graphics.lineTo(ps.x, ps.y); ps = myCube.local3DToGlobal(v8[6]); myCube.graphics.lineTo(ps.x, ps.y); ps = myCube.local3DToGlobal(v8[7]); myCube.graphics.lineTo(ps.x, ps.y); ps = myCube.local3DToGlobal(v8[4]); myCube.graphics.lineTo(ps.x, ps.y); ps = myCube.local3DToGlobal(v8[0]); myCube.graphics.moveTo(ps.x, ps.y); ps = myCube.local3DToGlobal(v8[4]); myCube.graphics.lineTo(ps.x, ps.y); ps = myCube.local3DToGlobal(v8[1]); myCube.graphics.moveTo(ps.x, ps.y); ps = myCube.local3DToGlobal(v8[5]); myCube.graphics.lineTo(ps.x, ps.y); ps = myCube.local3DToGlobal(v8[2]); myCube.graphics.moveTo(ps.x, ps.y); ps = myCube.local3DToGlobal(v8[6]); myCube.graphics.lineTo(ps.x, ps.y); ps = myCube.local3DToGlobal(v8[3]); myCube.graphics.moveTo(ps.x, ps.y); ps = myCube.local3DToGlobal(v8[7]); myCube.graphics.lineTo(ps.x, ps.y); } } }
localToGlobal | () | 方法 |
public function localToGlobal(point:Point):Point
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
将 point
对象从显示对象的(本地)坐标转换为舞台(全局)坐标。
此方法允许您将任何给定的 x 和 y 坐标从相对于特定显示对象原点 (0,0) 的值(本地坐标)转换为相对于舞台原点的值(全局坐标)。
要使用此方法,请先创建 Point 类的一个实例。您分配的 x 和 y 的值表示本地坐标,因为它们是相对于显示对象原点的值。
然后,您可以将创建的 Point 实例作为参数传递给 localToGlobal()
方法。该方法会返回一个新的 Point 对象,该对象具有相对于舞台原点(而不是显示对象原点)的 x 和 y 值。
参数
point:Point — 使用 Point 类创建的点的名称或标识符,指定 x 和 y 坐标作为属性。
|
Point — 具有相对于舞台的坐标的 Point 对象。
|
相关 API 元素
示例 ( 如何使用本示例 )
mouseX
和 mouseY
属性位于显示对象的坐标空间中。此代码使用 localToGlobal()
方法将这些属性转换为全局(舞台)坐标:
import flash.display.Sprite; import flash.events.MouseEvent; import flash.geom.Point; var square:Sprite = new Sprite(); square.graphics.beginFill(0xFFCC00); square.graphics.drawRect(0, 0, 100, 100); square.x = 100; square.y = 200; addChild(square); square.addEventListener(MouseEvent.CLICK, traceCoordinates) function traceCoordinates(event:MouseEvent):void { var clickPoint:Point = new Point(square.mouseX, square.mouseY); trace("display object coordinates:", clickPoint); trace("stage coordinates:", square.localToGlobal(clickPoint)); }
added | 事件 |
flash.events.Event
属性 Event.type =
flash.events.Event.ADDED
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
将显示对象添加到显示列表中时调度。以下方法会触发此事件:DisplayObjectContainer.addChild()
、DisplayObjectContainer.addChildAt()
。
Event.ADDED
常量定义 added
事件对象的 type
属性值。
此事件具有以下属性:
属性 | 值 |
---|---|
bubbles | true |
cancelable | false ;没有要取消的默认行为。 |
currentTarget | 当前正在使用某个事件侦听器处理 Event 对象的对象。 |
target | 要添加到显示列表中的 DisplayObject 实例。target 不一定是显示列表中注册此事件侦听器的对象。请使用 currentTarget 属性来访问显示列表中当前正在处理此事件的对象。 |
相关 API 元素
addedToStage | 事件 |
flash.events.Event
属性 Event.type =
flash.events.Event.ADDED_TO_STAGE
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9.0.28.0, Flash Lite 4 |
在将显示对象直接添加到舞台显示列表或将包含显示对象的子树添加至舞台显示列表中时调度。以下方法会触发此事件:DisplayObjectContainer.addChild()
、DisplayObjectContainer.addChildAt()
。
Event.ADDED_TO_STAGE
常量定义 addedToStage
事件对象的 type
属性值。
此事件具有以下属性:
属性 | 值 |
---|---|
bubbles | false |
cancelable | false ;没有要取消的默认行为。 |
currentTarget | 当前正在使用某个事件侦听器处理 Event 对象的对象。 |
target | DisplayObject 实例将添加到舞台的显示列表中,可直接添加它,也可以添加包含 DisplayObject 实例的子树。如果 DisplayObject 实例将被直接添加,会在此事件之前发生 added 事件。 |
相关 API 元素
enterFrame | 事件 |
flash.events.Event
属性 Event.type =
flash.events.Event.ENTER_FRAME
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
[播放事件] 播放头进入新帧时调度。如果播放头不移动,或者只有一帧,则会继续以帧速率调度此事件。此事件为广播事件,这意味着具有注册了此事件的侦听器的所有显示对象都会调度此事件。
Event.ENTER_FRAME
常量定义 enterFrame
事件对象的 type
属性值。
注意:此事件既不具有“捕获阶段”也不具有“冒泡阶段”,这意味着必须直接将事件侦听器添加到任何潜在的目标,而无论目标是否位于显示列表中。
此事件具有以下属性:
属性 | 值 |
---|---|
bubbles | false |
cancelable | false ;没有要取消的默认行为。 |
currentTarget | 当前正在使用某个事件侦听器处理 Event 对象的对象。 |
target | 具有为 enterFrame 事件注册的侦听器的任何 DisplayObject 实例。 |
exitFrame | 事件 |
flash.events.Event
属性 Event.type =
flash.events.Event.EXIT_FRAME
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 2, Flash Lite 4 |
[广播事件] 播放头退出当前帧时调度。所有帧脚本已运行。如果播放头不移动,或者只有一帧,则会继续以帧速率调度此事件。此事件为广播事件,这意味着具有注册了此事件的侦听器的所有显示对象都会调度此事件。
Event.EXIT_FRAME
常量定义 exitFrame
事件对象的 type
属性的值。
注意:此事件既不具有“捕获阶段”也不具有“冒泡阶段”,这意味着必须直接将事件侦听器添加到任何潜在的目标,而无论目标是否位于显示列表中。
此事件具有以下属性:
属性 | 值 |
---|---|
bubbles | false |
cancelable | false ;没有要取消的默认行为。 |
currentTarget | 当前正在使用某个事件侦听器处理 Event 对象的对象。 |
target | 具有为 enterFrame 事件注册的侦听器的任何 DisplayObject 实例。 |
frameConstructed | 事件 |
flash.events.Event
属性 Event.type =
flash.events.Event.FRAME_CONSTRUCTED
语言版本: | ActionScript 3.0 |
运行时版本: | Flash Player 10, AIR 2, Flash Lite 4 |
[广播事件] 在帧显示对象的构造函数运行之后但在帧脚本运行之前调度。如果播放头不移动,或者只有一帧,则会继续以帧速率调度此事件。此事件为广播事件,这意味着具有注册了此事件的侦听器的所有显示对象都会调度此事件。
Event.FRAME_CONSTRUCTED
常量定义 frameConstructed
事件对象的 type
属性的值。
注意:此事件既不具有“捕获阶段”也不具有“冒泡阶段”,这意味着必须直接将事件侦听器添加到任何潜在的目标,而无论目标是否位于显示列表中。
此事件具有以下属性:
属性 | 值 |
---|---|
bubbles | false |
cancelable | false ;没有要取消的默认行为。 |
currentTarget | 当前正在使用某个事件侦听器处理 Event 对象的对象。 |
target | 具有为 frameConstructed 事件注册的侦听器的任何 DisplayObject 实例。 |
removed | 事件 |
flash.events.Event
属性 Event.type =
flash.events.Event.REMOVED
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
将要从显示列表中删除显示对象时调度。DisplayObjectContainer 类的以下两个方法会生成此事件:removeChild()
和 removeChildAt()
。
如果必须删除某个对象来为新对象提供空间,则 DisplayObjectContainer 对象的下列方法也会生成此事件:addChild()
、addChildAt()
和 setChildIndex()
。
Event.REMOVED
常量定义 removed
事件对象的 type
属性值。
此事件具有以下属性:
属性 | 值 |
---|---|
bubbles | true |
cancelable | false ;没有要取消的默认行为。 |
currentTarget | 当前正在使用某个事件侦听器处理 Event 对象的对象。 |
target | 要从显示列表中删除的 DisplayObject 实例。target 不一定是显示列表中注册此事件侦听器的对象。请使用 currentTarget 属性来访问显示列表中当前正在处理此事件的对象。 |
removedFromStage | 事件 |
flash.events.Event
属性 Event.type =
flash.events.Event.REMOVED_FROM_STAGE
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9.0.28.0, Flash Lite 4 |
在从显示列表中直接删除显示对象或删除包含显示对象的子树时调度。DisplayObjectContainer 类的以下两个方法会生成此事件:removeChild()
和 removeChildAt()
。
如果必须删除某个对象来为新对象提供空间,则 DisplayObjectContainer 对象的下列方法也会生成此事件:addChild()
、addChildAt()
和 setChildIndex()
。
Event.REMOVED_FROM_STAGE
常量定义 removedFromStage
事件对象的 type
属性值。
此事件具有以下属性:
属性 | 值 |
---|---|
bubbles | false |
cancelable | false ;没有要取消的默认行为。 |
currentTarget | 当前正在使用某个事件侦听器处理 Event 对象的对象。 |
target | DisplayObject 实例将从舞台的显示列表中删除,可直接删除它,也可以删除包含 DisplayObject 实例的子树。如果 DisplayObject 实例将被直接删除,会在此事件之前发生 removed 事件。 |
render | 事件 |
flash.events.Event
属性 Event.type =
flash.events.Event.RENDER
语言版本: | ActionScript 3.0 |
运行时版本: | AIR 1.0, Flash Player 9, Flash Lite 4 |
[广播事件] 将要更新和呈现显示列表时调度。此事件为侦听此事件的对象在呈现显示列表之前进行更改提供了最后的机会。每次希望调度 render
事件时,必须调用 Stage 对象的 invalidate()
方法。只有当 Render
事件与调用 Stage.invalidate()
的对象互相信任时,才会将这些事件调度给某个对象。此事件为广播事件,这意味着具有注册了此事件的侦听器的所有显示对象都会调度此事件。
注意:如果显示未呈现,则不会调度此事件。当内容最小化或遮蔽时会出现这种情况。
Event.RENDER
常量定义 render
事件对象的 type
属性的值。
注意:此事件既不具有“捕获阶段”也不具有“冒泡阶段”,这意味着必须直接将事件侦听器添加到任何潜在的目标,而无论目标是否位于显示列表中。
此事件具有以下属性:
属性 | 值 |
---|---|
bubbles | false |
cancelable | false ;不能取消默认行为。 |
currentTarget | 当前正在使用某个事件侦听器处理 Event 对象的对象。 |
target | 具有为 render 事件注册的侦听器的任何 DisplayObject 实例。 |
DisplayObjectExample
类在舞台的角上绘制了一个橙色的正方形,然后通过显示每个事件的文本信息对事件作出响应。执行下列步骤可完成该任务:
- 声明用于正方形的颜色和大小的类属性。
- 构造函数调用
draw()
方法,在舞台上的默认坐标处 (x = 0, y = 0) 绘制一个橙色的正方形。 - 将以下事件侦听器方法附加到该正方形:
addedHandler()
侦听added
事件,该事件在将正方形添加到显示列表中时调度。enterFrameHandler()
侦听enterFrame
事件,它在本示例中没有实际意义。removedHandler()
侦听removed
事件,该事件在将正方形从显示列表中删除(单击该正方形时会发生此情况)时调度。clickHandler()
侦听click
事件,该事件在单击该橙色正方形时调度。renderHandler()
在显示列表更新之后侦听render
事件。
package { import flash.display.Sprite; public class DisplayObjectExample extends Sprite { public function DisplayObjectExample() { var child:CustomDisplayObject = new CustomDisplayObject(); addChild(child); } } } import flash.display.DisplayObject; import flash.display.Sprite; import flash.display.Stage; import flash.display.StageAlign; import flash.display.StageScaleMode; import flash.events.*; class CustomDisplayObject extends Sprite { private var bgColor:uint = 0xFFCC00; private var size:uint = 80; public function CustomDisplayObject() { draw(); addEventListener(Event.ADDED, addedHandler); addEventListener(Event.ENTER_FRAME, enterFrameHandler); addEventListener(Event.REMOVED, removedHandler); addEventListener(MouseEvent.CLICK, clickHandler); addEventListener(Event.RENDER, renderHandler); } private function draw():void { graphics.beginFill(bgColor); graphics.drawRect(0, 0, size, size); graphics.endFill(); } private function clickHandler(event:MouseEvent):void { trace("clickHandler: " + event); parent.removeChild(this); } private function addedHandler(event:Event):void { trace("addedHandler: " + event); stage.scaleMode = StageScaleMode.NO_SCALE; stage.align = StageAlign.TOP_LEFT; stage.addEventListener("resize", resizeHandler); } private function enterFrameHandler(event:Event):void { trace("enterFrameHandler: " + event); removeEventListener("enterFrame", enterFrameHandler); } private function removedHandler(event:Event):void { trace("removedHandler: " + event); stage.removeEventListener("resize", resizeHandler); } private function renderHandler(event:Event):void { trace("renderHandler: " + event); } private function resizeHandler(event:Event):void { trace("resizeHandler: " + event); } }
Tue Jun 12 2018, 11:04 AM Z