跳到主要内容

路径(Path)

Path 是一个可被 Renderer 绘制的可变路径对象。未改变的 路径可以在同一帧中多次绘制。但是,如果在绘制后修改它(通过 moveTo、lineTo、cubicTo、add 等),则必须等到下一帧才能再次绘制。

构造器(Constructors)

new

new() -> Path
local path = Path.new()
path:moveTo(Vector.xy(0, 0))

方法(Methods)

moveTo

moveTo(to: Vector) -> ()

将当前点移动到指定位置,开始一个新轮廓。

path:moveTo(Vector.xy(0, 0))

lineTo

lineTo(to: Vector) -> ()

从当前点到指定点添加一条直线段。

path:lineTo(Vector.xy(10, 0))

quadTo

quadTo(control: Vector, to: Vector) -> ()

从当前点到指定点添加一条二次贝塞尔曲线, 使用控制点定义曲线形状。

path:quadTo(
Vector.xy(-50, -50), -- 控制点
Vector.xy(0, 0) -- 终点
)

cubicTo

cubicTo(controlOut: Vector, controlIn: Vector, to: Vector) -> ()

从当前点到指定点添加一条三次贝塞尔曲线, 使用 controlOut 作为起始切线,controlIn 作为终点切线。

path:cubicTo(
Vector.xy(25, -40), -- 控制点出
Vector.xy(75, 40), -- 控制点入
Vector.xy(100, 0) -- 终点
)

close

close() -> ()

通过从当前点添加一条线段回到轮廓的第一个点(最近的 moveTo)来闭合当前轮廓。

-- 绘制矩形
path:moveTo(Vector.xy(-10, -10))
path:lineTo(Vector.xy(10, -10))
path:lineTo(Vector.xy(10, 10))
path:lineTo(Vector.xy(-10, 10))
-- 闭合路径
path:close()

__len

__len() -> number

每个条目是一个 PathCommand,描述路径中的一个段或操作。

local cmd = path[1]
print(cmd.type)

返回路径中的命令数量。

local count = #path
print(count)

reset

reset() -> ()

在同一帧中绘制 Path 后,请勿修改或重置它。 如果需要更改,请等到下一帧。 仅在已使用 Renderer.drawPath 绘制后的后续帧中调用 reset

path:reset()

add

add(other: PathData, transform: Mat2D?) -> ()

other 中的命令追加到此路径上。如果提供了 transform, 则追加的命令在添加时会被变换。

local dst = Path.new()
local src = Path.new()

src:moveTo(Vector.xy(0, 0))
src:lineTo(Vector.xy(10, 0))
src:lineTo(Vector.xy(10, 10))
src:close()

-- 将 `src` 添加到 `dst` 中(可选带 transform)
dst:add(src)

contours

contours() -> ContourMeasure?

返回路径中第一个轮廓的 ContourMeasure。轮廓是从一个 moveTo 开始、 到下一个 moveTo(或路径末尾)之前的路径段序列。使用返回的 ContourMeasure 上的 next 属性遍历后续轮廓。如果路径没有轮廓则返回 nil

local contour = path:contours()
while contour do
print(contour.length)
contour = contour.next
end

measure

measure() -> PathMeasure

返回一个 PathMeasure,用于测量跨所有轮廓的整个路径。 这提供了总长度并允许对路径整体进行操作。

local measure = path:measure()
local pathLength = measure.length
print(pathLength)