共计 3467 个字符,预计需要花费 9 分钟才能阅读完成。
WORLDINSTANCE 脚本接口
概述
WORLDINSTANCE
是一个脚本接口,表示布局中出现的对象类型(由 IObjectClass
表示)的单个实例。它派生自 IInstance
脚本接口。许多对象返回一个更具体的类,该类派生自插件或添加特定于插件的 API。更多信息请参阅插件接口参考。
获取 IWorldInstance
通常通过 IObjectClass
方法访问实例,例如 runtime.objects.Sprite.getFirstInstance()
。尽量避免将对象类与对象实例混淆。常见的错误是尝试使用类似的方式来获取 Sprite 实例的 X 坐标,但它是 IObjectClass
,没有位置。在尝试读取实例属性之前,首先需要添加另一个调用以获取实例,例如 runtime.objects.Sprite.x
。
常规 API
- ILayout: 表示实例所在的布局。
- ILayer: 表示实例所在的层。
- x, y: 设置或获取此实例在布局坐标中的位置。这些方法允许同时设置或获取两个坐标。
- dx, dy: 通过添加 X 坐标和 Y 坐标来调整位置。
- zElevation (英语): 实例相对于其所在图层的 Z 高程。
- totalZElevation: 只读值,指示实例的 Z 高程,包括其层的 Z 高程。
- width, height: 设置或获取此实例的大小(在布局坐标中)。这些方法允许同时设置或获取两个值。
- angle: 实例的角度(以弧度为单位)。如果更改,请相应地更新 angleDegrees。
- angleDegrees: 实例的角度(以度为单位)。如果更改,请相应地更新 angle。
- getBoundingBox(): 返回一个 DOMRect,表示布局坐标中实例的轴对齐边界框。这将返回边界框的副本。如果实例发生更改,则返回的 DOMRect 不会更改,更改 DOMRect 也不会影响实例。
- getBoundingQuad(): 返回一个 DOMQuad,表示布局坐标中实例的边界四边形。这始终是一个矩形,但与边界框不同,可以表示旋转。这将返回边界四边形的副本。如果实例发生更改,则返回的 DOMQuad 不会更改,更改 DOMQuad 也不会影响实例。
- isVisible: 布尔值,指示实例在布局中是否可见。
- isOnScreen(): 如果对象的边界框的任何部分位于屏幕区域内,则返回 true(执行与“在屏幕上”条件相同的检查)。这不受对象可见性或不透明度的影响。
- opacity: 实例的不透明度,作为 [0,1] 范围内的浮点数,其中 0 是完全透明的,1 是完全不透明的。
- colorRgb: 包含 3 个元素的数组,指定实例的红色、绿色和蓝色滤镜,颜色值在 0-1 范围内为浮点数。
- blendMode: 字符串,指示实例的当前混合模式,用于控制它在背景上的绘制方式。这必须是 "normal"、"additive"、"copy"、"destination-over"、"source-in"、"destination-in"、"source-out"、"destination-out"、"source-atop"、"destination-atop" 之一。
Z 订单 API
- moveToTop(): 按 Z 顺序将实例移动到其当前层的顶部。
- moveToBottom(): 按 Z 顺序将实例移动到其当前层的底部。
- moveToLayer(layer): 将实例移动到其 ILayer 提供的其他层的顶部。
- moveAdjacentToInstance(other, isAfter): 按 Z 顺序将实例移动到(另一个)旁边。如有必要,还会将实例移动到与相同的层。如果为 true,则将其移动到给定实例的正上方,否则将其移至正下方。other IWorldInstance other isAfter
- zIndex: 只读整数,指示实例在其当前层上按 Z 顺序排列的当前索引,从当前层后面的 0 开始,并随着它移动到前面而增加。
碰撞 API
- isCollisionEnabled: 设置或获取一个布尔值,指示是否为此实例启用冲突。如果禁用,实例将始终无法通过所有重叠或冲突检查。
- containsPoint(x, y): 使用点的碰撞面(如果有)测试点是否与此实例相交,并返回一个布尔值,指示该点是否在实例的碰撞区域内。
- testOverlap(wi): 测试此实例是否与给出的另一个世界实例重叠,如果它们重叠,则返回 true,否则返回 false。这将使用对象的碰撞多边形(如果有)。如果任一实例禁用了冲突,则始终返回 false。IWorldInstance true false false
- testOverlapSolid(): 测试此实例是否与“Solid”行为重叠。这将返回第一个实例的接口类,该实例的实体行为与此实例重叠,或者没有。这将使用对象的碰撞多边形(如果有),并尊重实体碰撞过滤。null
- whenFoundOverlap(): 此方法的返回值为 true,当找到重叠时为 falsey,因此可以直接在语句中使用。if
网格失真 API
- createMesh(hsize, vsize): 创建一个网格,用于在水平和垂直方向上使具有给定网格点数的对象外观变形。最小大小为 2。
- releaseMesh(): 释放已创建的任何网格,恢复到对象的默认渲染,而不出现网格失真。如果未创建网格,则忽略。
- setMeshPoint(column, row, opts): 更改已创建网格中的给定点,该网格由其从零开始的列和行给出。opts 是一个可以指定以下属性的对象:opts
- mode:(默认)或的字符串,确定如何解释、和选项。"absolute" "relative" xyuv
- x 和:网格点位置偏移,在对象大小上的归一化坐标 [0,1] 中。它们被允许超出对象边界。在相对模式下,这些被添加到网格点的当前位置。y
- u 和:网格点的纹理坐标,以归一化坐标 [0,1] 表示。这些不允许超出对象范围。可以省略这些,或者在绝对模式下设置为 -1,以指示不更改默认的纹理坐标。v
- zElevation:网格点的 Z 高程,允许 3D 变形。与整个对象的 Z 高程类似,这会在 Z 轴上上下移动网格点。
- getMeshSize(): 如果创建了网格,则将网格的大小返回为(对应于传递给 createMesh() 的大小)。如果未创建网格,则返回 [0,0]。[hsize, vsize] createMesh() [0,0]
场景图 API
- getParent(): 如果存在,则在场景图层次结构中返回此实例的父级,否则为 null。IWorldInstance null
- getTopParent(): 如果存在,则返回场景图层次结构中此实例的顶级父级(根据定义,该级本身没有父级)。null
- children(): 一种生成器方法,可用于迭代实例的所有子级,直至顶级父级。
- getChildCount(): 返回已添加到场景图层次结构中此实例的子项数。
- getChildAt(index): 在已添加到此实例的子实例中,返回给定从零开始的索引的子实例。如果索引越界,则返回 null。null
- addChild(wi, opts): 在场景图层次结构中添加由此实例的子实例给出的另一个世界实例。此实例将成为其在场景图层次结构中的父级。子项将根据对象中指定的选项移动、缩放和旋转此实例,该对象支持以下属性:IWorldInstance opts
- transformX:使用此实例的 X 位置移动子项
- transformY:使用此实例的 Y 位置移动子项
- transformWidth:使用此实例的宽度缩放子项
- transformHeight:使用此实例的身高缩放子项
- transformAngle:以此实例的角度旋转子项
- transformZElevation:使用此实例的 Z 高程移动子项
- transformOpacity:根据家长的不透明度更改孩子的不透明度
- transformVisibility:如果父项也是不可见的,则使子项不可见
- destroyWithParent:如果此实例被销毁,则自动销毁子实例
每个选项都是一个布尔值,如果省略,则默认为布尔值,因此只需要指定属性。false true
- removeChild(wi): 删除以前添加的此实例的现有子级。子项已从场景图层次结构中分离,此实例不再充当其父级。被移除的孩子仍然保留自己的孩子(如果有的话)。IWorldInstance addChild()
- removeFromParent(): 从其父实例中删除此实例(如果有的话)。如果实例没有父级,则该方法不起作用。wi.getParent().removeChild(wi)
正文完