渲染器(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