跳到主要内容

渲染器(Renderer)

提供绘制路径和图像、管理裁剪以及 在渲染期间应用变换的功能。

方法(Methods)

drawPath

drawPath(path: Path, paint: Paint) -> ()

使用指定的 画笔(Paint) 绘制给定的 路径(Path)

更多详细说明和工作示例,请参阅 使用节点脚本绘制

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

drawImage

drawImage(image: Image, sampler: ImageSampler, blendMode: BlendMode, opacity: number) -> ()

使用 图像采样器(ImageSampler)混合模式(BlendMode) 和透明度绘制 图像(Image)

查看 脚本演示 以了解工作示例。

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

drawImageMesh

drawImageMesh(image: Image, sampler: ImageSampler, vertices: VertexBuffer, uvs: VertexBuffer, triangles: TriangleBuffer, blendMode: BlendMode, opacity: number) -> ()

使用由顶点、纹理坐标和三角形索引定义的网格数据绘制图像。

查看 脚本演示 以了解工作示例。

function draw(self: DrawImageMesh, renderer: Renderer)
if self.myImage and self.sampler and self.vertices and self.uvs and self.triangles then
renderer:drawImageMesh(
self.myImage,
self.sampler,
self.vertices,
self.uvs,
self.triangles,
'srcOver',
1
)
end
end

clipPath

clipPath(path: Path) -> ()

将后续绘制限制在给定 路径(Path) 定义的区域内。 裁剪在下一次 restore 调用之前持续生效。

查看 脚本演示 以了解工作示例。

function draw(self: DrawImageClipped, renderer: Renderer)
if self.myImage and self.sampler then
local w: number = self.myImage.width
local h: number = self.myImage.height
local rx: number = (w / 2) * self.clipRadiusX
local ry: number = (h / 2) * self.clipRadiusY
buildOvalPath(self.clipPath, w / 2, h / 2, rx, ry)

renderer:save()
renderer:clipPath(self.clipPath)
renderer:drawImage(self.myImage, self.sampler, 'srcOver', 1)
renderer:restore()
end
end

save

save() -> ()

保存当前渲染状态,包括变换和裁剪状态。

function draw(self: MyGame, renderer: Renderer)
-- draw each enemy
for _, enemy in self.enemies do
renderer:save()
enemy.artboard:draw(renderer)
renderer:restore()
end
end

restore

restore() -> ()

恢复最近一次保存的渲染状态。

function draw(self: MyGame, renderer: Renderer)
-- draw each enemy
for _, enemy in self.enemies do
renderer:save()
enemy.artboard:draw(renderer)
renderer:restore()
end
end

transform

transform(transform: Mat2D) -> ()

对当前渲染状态应用变换。变换会累计生效,直到 restore 为止。

function draw(self: TransformedImage, renderer: Renderer)
if self.myImage and self.sampler then
local m = Mat2D.withScale(2, 3)
-- 直接调整矩阵项以获得额外的倾斜/拉伸控制。
m.xx = 5

renderer:save()
renderer:transform(m)
renderer:drawImage(self.myImage, self.sampler, 'srcOver', 1)
renderer:restore()
end
end