画板(Artboard)
表示一个 Rive 画板实例(Artboard Instance),提供绘制、推进、交互处理以及按名称访问 命名节点(named nodes) 与数据的能力。
字段(Fields)
frameOrigin
若为 true,画板原点(origin)按帧原点处理。
data
与画板关联的类型化数据(typed data)。
width
画板宽度(width)。
self.artboardInstance = self.myArtboard:instance()
if self.artboardInstance then
self.artboardInstance.width = 20
end
height
画板高度(height)。
self.artboardInstance = self.myArtboard:instance()
if self.artboardInstance then
self.artboardInstance.height = 20
end
方法(Methods)
draw
draw(renderer: Renderer, visitor: ((context: any, drawable: Drawable, renderer: Renderer) ->())?, context: any?) -> ()
使用提供的渲染器(Renderer)绘制画板。可选的 visitor 与 context 用于按自定义属性接管部分可绘制对象的绘制。
使用 visitor 时,每个带有自定义属性的可绘制对象(Drawable)会被交给它,而不是直接绘制:由 visitor 决定是否调用 drawable:draw(renderer),以及在何种渲染器状态下绘制。它在渲染器上设置的任何状态都会随该次访问结束。其余可绘制对象照常绘制,裁剪仍然生效。context 会原样传递给 visitor。
-- In init: local GLOW = artboard:propertyKey("glow")
-- Draw only the drawables tagged `glow`, in their own paint.
artboard:draw(renderer, function(context, drawable, renderer)
if drawable:boolean(GLOW) then
drawable:draw(renderer)
end
end)
绘制带有标记的嵌套画板时,会在该次 drawable:draw 调用内部访问其中被标记的可绘制对象,因此数值可以通过局部变量向下传递:
local level = 1
artboard:draw(renderer, function(context, drawable, renderer)
local outer = level
level = outer * math.min(drawable:number(EMISSIVE) or 0, 1)
local c = math.floor(level * 255)
renderer:setColorModulation(Color.rgba(c, c, c, 255))
drawable:draw(renderer)
level = outer
end)
drawModulated
drawModulated(renderer: Renderer, key: PropertyKey) -> ()
按每个可绘制对象上该键(PropertyKey)对应的自定义属性设置颜色调制后绘制画板:数字视为钳制在 0..1 的灰度,颜色则原样使用。没有该属性的可绘制对象在渲染器的当前状态下绘制。层级会沿着包含其他对象的已标记可绘制对象向下相乘:在标记为 0.5 的嵌套画板内部,标记为 0.2 的形状以 0.1 绘制,未标记的以 0.5 绘制。此过程不会回调到脚本,因此这是绘制发光(emission)这类通道最省开销的方式。
-- In init: local EMISSIVE = artboard:propertyKey("emissive")
-- Everything black except drawables tagged `emissive`.
renderer:save()
renderer:setColorModulation(Color.rgba(0, 0, 0, 255))
artboard:drawModulated(renderer, EMISSIVE)
renderer:restore()
propertyKey
propertyKey(name: string) -> PropertyKey
返回名为 name 的自定义属性所使用的读取键。若文件中没有任何属性使用这个名称,该键不会匹配任何内容,因此通过它进行的每次读取都会返回 nil。自定义属性在编辑器的检查器中添加到可绘制对象上。
advance
按给定秒数推进画板。若应继续接收 advance 调用则返回 true。
instance
创建具有独立状态的新画板实例。
animation
创建与该画板实例关联的动画实例(Animation Instance)。
bounds
返回画板包围盒(bounding box),由两个 Vector 组成:最小点与最大点。
local minPt, maxPt = self.myArtboard:bounds()
print("Bounds width", maxPt.x - minPt.x)
print("Bounds height", maxPt.y - minPt.y)
node
返回给定名称的节点;若不存在返回 nil。
pointerDown
指针按下(Pointer Down)处理。返回命中测试结果(hit-test),0 为未命中,非零为命中。
pointerUp
指针抬起(Pointer Up)处理。返回命中测试结果。
pointerMove
指针移动(Pointer Move)处理。返回命中测试结果。
pointerExit
指针离开(Pointer Exit)处理。返回命中测试结果。
pointerScroll
pointerScroll(event: ScrollEvent) -> number
滚动(Scroll)处理。返回命中测试结果(0 为未命中);当画板内的 ScrollConstraint 视图接管了此次滚动时返回非零。此时应认领外层事件,使该手势保持在当前节点上。
function handlePointerScroll(self: RenderInstance, event: ScrollEvent)
if self.instance then
local localPos = event.position - Vector.xy(self.x, self.y)
local localEvent = ScrollEvent.new(
event.id,
localPos,
event.delta,
event.phase,
event.precise,
event.timeStamp
)
if self.instance:pointerScroll(localEvent) ~= 0 then
event:hit()
end
end
end
addToPath
将画板几何添加到给定路径(Path),可选应用变换矩阵(matrix)。
gamepadConnected
gamepadConnected(event: GamepadConnected) -> number
将游戏手柄连接事件转发给画板:先发给当前焦点控件,再发给所有未消费该事件的脚本化节点。返回接收到该事件的脚本化节点数量。
function gamepadConnected(self: Forwarder, event: GamepadConnected)
self.instance:gamepadConnected(event)
end
gamepadEvent
gamepadEvent(event: GamepadEvent) -> number
将游戏手柄按钮或轴变化转发给画板,方式与 gamepadConnected 相同。
gamepadDisconnected
gamepadDisconnected(event: GamepadDisconnected) -> number
将游戏手柄断开事件转发给画板,方式与 gamepadConnected 相同。