跳到主要内容

画板(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 相同。

看完还有疑问?进群交流下!
与众多 Rive 创作者、开发者一起交流探讨与答疑解惑。
加入交流群