Skip to main content

Scene

Scene graph objects for artboards, nodes, and animations.


Artboard

Represents a Rive artboard instance.

Attributes

AttributeTypeAccessDescription
widthnumberread/writeArtboard width
heightnumberread/writeArtboard height
frameOriginbooleanread/writeOrigin is frame origin
datatypedread-onlyAssociated ViewModel data

Methods

artboard:draw(renderer)

Renders the artboard.

artboard:draw(renderer: Renderer)

artboard:advance(deltaTime)

Advances animations. Returns false when done (non-looping).

artboard:advance(deltaTime: number): boolean

artboard:instance()

Creates an independent copy.

artboard:instance(): Artboard

artboard:animation(name)

Gets an animation by name.

artboard:animation(name: string): Animation?

artboard:bounds()

Gets the bounding box.

artboard:bounds(): Vector, Vector  -- min, max

artboard:node(name)

Gets a node by name.

artboard:node(name: string): Node?

artboard:addToPath(path, transform?)

Adds the artboard's geometry to a Path, optionally transformed.

artboard:addToPath(path: Path, transform?: Mat2D)

Pointer Methods (Event Forwarding)

Used to forward pointer events to nested/instantiated artboards. Returns hit-test result (0 = miss, non-zero = hit).

artboard:pointerDown(event: PointerEvent): number
artboard:pointerUp(event: PointerEvent): number
artboard:pointerMove(event: PointerEvent): number
artboard:pointerExit(event: PointerEvent): number

Note: Use these methods to forward PointerEvent objects to nested artboards. Node script handlers already receive PointerEvent objects. See PointerEvent.

See Also: Animation, PointerEvent


Node

A scripted node that can be attached to any Node in Rive. Renders in the local transform space of the hosting Node.

Protocol Methods

init(self): boolean

Called once when the node is created. Return true to keep the script active.

function init(self: MyNode): boolean
self.counter = 0
print("Node initialized")
return true
end

advance(self, seconds): boolean

Optional per-frame update. Return true to continue receiving calls.

function advance(self: MyNode, seconds: number): boolean
self.counter += seconds
return true -- Keep running
end

update(self)

Called when an Input value changes.

function update(self: MyNode)
print("Input changed!")
end

draw(self, renderer)

Called to render the node.

function draw(self: MyNode, renderer: Renderer)
renderer:drawPath(self.path, self.paint)
end

Pointer Event Handlers

pointerDown(self, event)

Triggered when pointer presses down.

function pointerDown(self: MyNode, event: PointerEvent)
print(`Pressed at ({event.position.x}, {event.position.y})`)
event:hit() -- Consume the event
end

pointerMove(self, event)

Triggered when pointer moves.

pointerUp(self, event)

Triggered when pointer releases.

pointerExit(self, event)

Triggered when pointer leaves the node area.

Factory Pattern

Node scripts return a factory function:

function draw(self: MyNode, renderer: Renderer)
end

return function(): Node<MyNode>
return {
init = init,
advance = advance,
draw = draw,
pointerDown = pointerDown,
myProperty = late(), -- Deferred initialization
}
end

See Also: PointerEvent, Renderer, NodeData


Animation

Controls animation playback.

Attributes

animation.duration

Total animation length in seconds. Type: number (read-only)

Methods

animation:advance(deltaTime)

Advances the animation. Returns false when complete (non-looping).

animation:advance(deltaTime: number): boolean

animation:setTime(seconds)

Jumps to a specific time.

animation:setTime(seconds: number)

animation:setTimeFrames(frames)

Jumps to a specific frame.

animation:setTimeFrames(frames: number)

animation:setTimePercentage(percent)

Jumps to a percentage (0.0-1.0) of duration.

animation:setTimePercentage(percent: number)

Example: Animation Scrubber

-- Assumes you have an Artboard reference (e.g., Input<Artboard<...>> named artboard)
function update(self)
local anim = self.artboard:animation("Idle")
anim:setTimePercentage(self.progress)
end

See Also: Artboard.animation

Next Steps