绘图画布

73次阅读
没有评论

共计 2305 个字符,预计需要花费 6 分钟才能阅读完成。

画布脚本接口(Drawing Canvas Script Interface)

这个接口从 IWorldInstance 派生,为画布插件添加了特定的 API。

示例

参见“生成图像”的示例,了解如何通过编程方式为画布生成图像。

绘图坐标

绘图 API 中使用的坐标系统与动作中的相同。更多信息请参阅画布对象文档。

绘图方法中的颜色

在一些绘图 API 中,有一些接受颜色的参数。这些用一个数组表示,可以是三个组件,例如[r, g, b],在这种情况下,alpha 被视为不透明的,或者是四个组件,例如[r, g, b, a],以指定 alpha。每个组件是一个归一化的浮点值,范围在 0 - 1 之间。

例如,[1, 0, 0]表示不透明的红色,而 [0, 0, 1, 0.5] 表示 50% 透明度的蓝色。

画布事件

请参阅实例事件,了解标准实例事件对象属性。

方法

  • fillRect(x, y, width, height, color1, color2, direction)

    用线性渐变填充画布上的矩形区域。direction 必须是 "horizontal" 或 "vertical"。

  • fillEllipse(x, y, radiusX, radiusY, color, isSmooth = true)

    用给定的颜色填充椭圆区域。位置是椭圆的中心,半径参数确定椭圆的形状(将两者设置为相同的值可以绘制一个圆)。默认情况下,绘制区域的边缘是平滑的;要实现像素化样式,请将 isSmooth 设置为 false。

  • outlineEllipse(x, y, radiusX, radiusY, color, thickness, isSmooth = true)

    用给定的颜色和线条粗细绘制椭圆轮廓。位置是椭圆的中心,半径参数确定椭圆的形状(将两者设置为相同的值可以绘制一个圆)。绘制轮廓时,thickness 参数表示线宽。默认情况下,绘制区域的边缘是平滑的;要实现像素化样式,请将 isSmooth 设置为 false。

  • line(x1, y1, x2, y2, color, thickness, lineCap = "butt")

    用给定的颜色和线条粗细在两点之间绘制实线或虚线。虚线变体还接受一个参数来设置划线的长度。lineCap 必须是 "butt"(在线的起始和结束位置正好结束线)或 "square"(使线的末端稍微超出起始和结束位置)。

  • fillPoly(polyPoints, color, isConvex = false)

    用给定的颜色填充多边形区域。多边形由一个包含两个元素数组的坐标数组指定,例如 [[x1, y1], [x2, y2], …]。对于线变体,thickness 和 lineCap 参数与 line() 和 lineDashed()方法中使用的相同。

    至少提供三个点以形成多边形,并且可能是凸形或凹形。然而,凹多边形在内部被转换为多个凸多边形。由于几何计算中的浮点精度问题,此过程有时会失败并导致呈现错误。如果已知形状为凸形,请为 isConvex 参数传递 true,这将绕过内部转换;但是,如果多边形实际上是凹形的,则不会正确呈现。

    注意:不支持自相交多边形,使用 fillPoly()和 linePoly()时无法正确绘制。

  • setDrawBlend(blendMode)

    设置用于在画布上进行绘制操作的混合模式。这与将画布本身绘制到布局所用的混合不同。混合模式用字符串指定,必须是 "normal"、"additive"、"copy"、"destination-over"、"source-in"、"destination-in"、"source-out"、"destination-out"、"source-atop" 或 "destination-atop" 之一。

  • async pasteInstances(instancesArr, includeEffects = true)

    在当前位置绘制与画布重叠的一系列实例,作为 IWorldInstance 的数组给出。默认情况下,对象会像现在这样完全呈现,考虑到添加到它们的任何效果;将 includeEffects 设置为 false,以便在禁用所有对象效果的情况下进行绘制。请注意,实际绘制是在 tick 结束时进行的,因此可以等待此方法以确保粘贴已完成。

    如果对象在粘贴后立即销毁而未完成等待,则不会进行绘制,因为它会在绘制之前被销毁。

  • setFixedResolutionMode(fixedWidth, fixedHeight)

    切换固定和自动分辨率模式。有关更多信息,请参阅画布对象文档。

  • surfaceDeviceWidth

  • surfaceDeviceHeight

    getSurfaceDeviceSize()

    只读值,表示画布呈现表面的设备像素大小。该方法同时返回两个值。

  • pixelScale

    只读值,表示画布上单个像素的对象坐标大小。有关坐标系统的更多信息,请参阅画布对象文档的相关部分。

  • async getImagePixelData()

    异步获取 GPU 上画布像素状态的快照,并将其读取回 CPU。解析为表示像素数据的 ImageData。请注意,这使用了未预乘的 alpha,而在 GPU 上的表面是预乘的,所以技术上这是有损的。

  • loadImagePixelData(imageData, premultiplyAlpha = false)

    将 ImageData 中的像素数据加载到画布呈现表面。ImageData 的大小必须等于 surfaceDeviceWidth 和 surfaceDeviceHeight。如果将可选参数 premultiplyAlpha 设置为 true,则像素数据将预乘 alpha(乘以 A 组件)。如果像素数据已经预乘,可以将其禁用,这也更快,因为可以跳过预乘步骤。

正文完
 0
评论(没有评论)