上下文(Context)
上下文(Context)是在脚本化节点初始化(init)时提供的对象。
它连接脚本与 Rive 运行时(Runtime),可访问:
- 更新调度(Update scheduling):请求节点在下一帧更新
- 数据(Data / ViewModels):访问绑定在节点或根画板上的视图模型上下文
- 资源(Assets):按名称获取图像、Blob、音频资源
方法(Methods)
markNeedsUpdate
将对象标记为下一帧需要更新。
当监听器回调等场景发生变化时,可调用它以触发 update 重新执行。
function init(self: MyNode, context: Context): boolean
self.context = context
-- Access a ViewModel property and listen for changes
local vm = context:viewModel()
if vm then
local name = vm:getString("name")
if name then
name:addListener(function()
-- Re-trigger update when the data changes
if self.context then
self.context:markNeedsUpdate()
end
end)
end
end
return true
end
viewModel
返回绑定到节点当前数据上下文的 视图模型(ViewModel)。 是脚本中读取数据绑定属性最常用方式。
function init(self: MyNode, context: Context): boolean
local vmi = context:viewModel()
if vmi then
local cannon = vmi:getTrigger('cannon')
end
return true
end
rootViewModel
返回绑定到根画板数据上下文的 视图模型(ViewModel)。 适合深层节点访问顶层数据。
function init(self: MyNode, context: Context): boolean
local vmi = context:rootViewModel()
if vmi then
local cannon = vmi:getTrigger('cannon')
end
return true
end
dataContext
返回当前节点的数据上下文(data context)。
function init(self: MyNode, context: Context): boolean
local dc = context:dataContext()
if dc then
local parentDC = dc:parent()
local vm = dc:viewModel()
end
return true
end
image
按名称返回图像资源;若不存在返回 nil。
返回的 图像(Image) 可通过 drawImage 绘制。
另见 ImageSampler。
type DrawImage = {
myImage: Image?,
sampler: ImageSampler?,
}
function init(self: DrawImage, context: Context): boolean
self.myImage = context:image('myImage')
self.sampler = ImageSampler('clamp', 'clamp', 'bilinear')
return true
end
function draw(self: DrawImage, renderer: Renderer)
if self.myImage and self.sampler then
renderer:drawImage(self.myImage, self.sampler, 'srcOver', 1)
end
end
return function(): Node<DrawImage>
return {
myImage = nil,
sampler = nil,
init = init,
draw = draw,
}
end
blob
按名称返回 二进制块(Blob) 资源(原始二进制数据);未找到返回 nil。
audio
按名称返回 音频源(AudioSource)。可通过全局 Audio API 播放。