类型 函数 库 display.* 返回值 ShapeObject(形状对象) 修订 版本 2024.3703 关键词 形状, 网格, 矢量对象 另请参阅 形状 — 路径、填充、描边 (指南) 显示对象 (指南)
通过提供形状的顶点绘制网格形状。局部原点位于网格的中心,锚点初始化为此局部原点。
display.newMesh( [parent,] [x, y,] options ) display.newMesh( options )
GroupObject(组对象). 用于插入网格的可选显示组。
数字. 对象相对于其父级的位置。
表. 包含网格选项的表 — 有关详细信息,请参阅下一节。
options
表接受以下网格参数
数组. 构成网格的顶点的 **x** 和 **y** 坐标数组。根据 mode
参数使用这些顶点构建网格。
GroupObject(组对象). 用于插入网格的可选显示组。如果在此处包含,它将覆盖在 options
表之外指定的任何 parent
定义。
数字. 对象相对于其父级的位置。如果在此处包含,它们将覆盖在 options
表之外指定的任何 x
或 y
定义。
字符串. 指示如何使用提供的顶点形成网格的字符串。默认为 "triangles"
。可接受的值为 "triangles"
、"strip"
、"fan"
或 "indexed"
。有关每种模式的描述,请参阅下面的网格绘制模式。
数组. "indexed"
类型的 mode
所需的索引数组。例如,要模拟 "strip"
模式的行为,此参数的值可以是{ 1,2,3, 2,3,4, 3,4,5 }
布尔值. 默认值为 false
的便捷参数。如果设置为 true
,则 indices
数组将被视为
数组. 构成网格的顶点的 **u** 和 **v** 纹理坐标数组。如果省略或无效,将根据标准化的 vertices
值自动分配 UV。纹理坐标是标准化坐标,其中 0,0
是图像的1,1
是图像的
mode
为 "triangles"
或 "indexed"
的网格由三个连续顶点的不相交组形成。"triangles"
模式的示例可以具有索引为 1,2,3
、4,5,6
和 7,8,9
的顶点。但是请注意,"triangles"
模式可能会导致多个三角形共享重复的顶点 — 要避免这种情况,您可以使用 "indexed"
类型并定义一个 indices
表,其中包含指向所用顶点的索引。
虽然这些方法可以用来编码任何网格,但如果一个顶点被多个三角形使用,它们都会有一些重复。在 "triangles"
的情况下,这是顶点本身。在 "indexed"
的情况下,这是顶点索引。重复索引的成本要低得多,因为它们是单个整数,而不是具有坐标和纹理坐标的整个顶点。
在某些情况下,可以通过 "strip"
或 "fan"
模式避免这种重复(请参阅下文)。
mode
为 "strip"
的网格由三个连续顶点形成。例如,可以具有索引为 1,2,3
、2,3,4
和 3,4,5
的顶点。有关此类型的更多信息,请参阅此处。
mode
为 "fan"
的网格由一个初始顶点和两个结束顶点形成。例如,可以具有索引为 1,2,3
、1,3,4
和 1,4,5
的顶点。有关此类型的更多信息,请参阅此处。
顶点将在视觉上发生偏移,以便网格的中心位于对象的原点。这在访问顶点时不会更改值。
修改网格时,原点不会调整到网格的中心。
引用任何方法的 index
参数时,必须指向现有顶点。
如果请求的网格无效,此函数将返回 nil
。
如果网格具有大量顶点,则为 mode
值为 "triangles"
或 "indices"
的网格设置描边会影响性能。
(继承自 ShapeObject(形状对象) 的属性)
形状对象具有一个 path
属性,该属性公开用于操作网格的方法。大多数方法都接受 index
参数,该参数是相关顶点的 Lua 数组索引(第一个顶点的索引为 1
)。所有参数均为 数字。
将索引为 index
的顶点设置为坐标 x
和 y
object.path:setVertex( index, x, y )
返回对应于顶点坐标的两个 数字
object.path:getVertex( index )
将索引为 index
的顶点设置为纹理坐标 u
和 v
object.path:setUV( index, u, v )
返回对应于顶点纹理坐标的两个 数字
object.path:getUV( index )
返回两个 数字,对应于将原点移动到网格中心时应用的水平和垂直偏移量。您可以通过这些值偏移网格对象,以补偿初始偏移并在世界坐标中获得精确的顶点位置。
object.path:getVertexOffset()
请注意,假设未应用缩放,则坐标为 x
和 y
的顶点的世界坐标将分别为mesh.x + x - offsetX
mesh.y + y - offsetY
0,0
处的顶点放入先前的对象原点
mesh:translate( mesh.path:getVertexOffset() )
更新网格的 vertices
、uvs
和 indices
object.path:update( options )
options
表接受用于更新网格的 vertices
、uvs
和 indices
。这些都是可选的,可以随意排除
local options = { vertices = {}, uvs = {}, indices = {} } mesh.path:update( options )
local mesh = display.newMesh( { x = 100, y = 100, mode = "triangles", vertices = { 0,0, 50,0, 0,100, 0,100, 50,0, 100,100, 100,100, 50,0, 100,0 }, uvs = { 0,0, 0.5,0, 0,1, 0,1, 0.5,0, 1,1, 1,1, 0.5,0, 1,0 } }) mesh:translate( mesh.path:getVertexOffset() ) -- Translate mesh so that vertices have proper world coordinates mesh.fill = { type="image", filename="cat.png" } local vertexX, vertexY = mesh.path:getVertex( 3 ) mesh.path:setVertex( 3, vertexX, vertexY-10 )
local mesh = display.newMesh( { x = 100, y = 100, mode = "indexed", vertices = { 0,0, 0,100, 50,0, 100,100, 100,0 }, indices = { 1,2,3, 2,3,4, 3,4,5 } }) mesh:translate( mesh.path:getVertexOffset() ) -- Translate mesh so that vertices have proper world coordinates mesh.fill = { type="image", filename="cat.png" } local vertexX, vertexY = mesh.path:getVertex( 3 ) mesh.path:setVertex( 3, vertexX, vertexY-10 )
local mesh = display.newMesh( { x = 100, y = 100, mode = "strip", vertices = { 0,0, 0,100, 50,0, 100,100, 100,0 } }) mesh:translate( mesh.path:getVertexOffset() ) -- Translate mesh so that vertices have proper world coordinates mesh.fill = { type="image", filename="cat.png" } local vertexX, vertexY = mesh.path:getVertex( 3 ) mesh.path:setVertex( 3, vertexX, vertexY-10 )
local mesh = display.newMesh( { x = 100, y = 100, mode = "fan", vertices = { 50,0, 0,0, 0,100, 100,100, 100,0 } }) mesh:translate( mesh.path:getVertexOffset() ) -- Translate mesh so that vertices have proper world coordinates mesh.fill = { type="image", filename="cat.png" } local vertexX, vertexY = mesh.path:getVertex( 3 ) mesh.path:setVertex( 3, vertexX, vertexY-10 )