图形 Graphics

      Graphics 组件为 GameObject 提供了绘制图形的能力。

      Demo

      安装

      使用 NPM

      1. npm i @eva/plugin-renderer @eva/plugin-renderer-graphics

      在浏览器中

      1. <script src=https://unpkg.com/@eva/plugin-renderer-graphics@1.2.x/dist/EVA.plugin.renderer.graphics.min.js></script>

      使用

      无需参数,将会返回一个 graphics 挂载 component 实例上,调用 graphics 属性上的方法即可绘制图形

      1. import { Game, GameObject } from ‘@eva/eva.js’
      2. import { RendererSystem } from ‘@eva/plugin-renderer’
      3. import { Graphics, GraphicsSystem } from ‘@eva/plugin-renderer-graphics’
      4. const game = new Game({
      5. systems: [
      6. new RendererSystem({
      7. canvas: document.querySelector(‘#canvas’),
      8. width: 750,
      9. height: 1000
      10. }),
      11. new GraphicsSystem()
      12. ]
      13. })
      14. const outter = new GameObject(‘container’, {
      15. position: {
      16. x: 200,
      17. y: 500
      18. },
      19. size: {
      20. width: 300,
      21. height: 24
      22. }
      23. })
      24. const progress = new GameObject(‘container’, {
      25. position: {
      26. x: 3,
      27. y: 3
      28. }
      29. })
      30. const outterGraphics = outter.addComponent(new Graphics())
      31. outterGraphics.graphics.beginFill(0xde3249, 1)
      32. outterGraphics.graphics.drawRoundedRect(0, 0, 300, 24, 12)
      33. outterGraphics.graphics.endFill()
      34. const progressGraphics = progress.addComponent(new Graphics())
      35. let i = 0
      36. setInterval(() => {
      37. setProgress(i++)
      38. }, 100)
      39. outter.addChild(progress)
      40. game.scene.addChild(outter)
      41. function setProgress(progress) {
      42. if (progress > 100) return
      43. const width = Math.max(12, (296 * progress) / 100)
      44. progressGraphics.graphics.clear()
      45. progressGraphics.graphics.beginFill(0x000000, 1)
      46. progressGraphics.graphics.drawRoundedRect(0, 0, width, 18, 9)
      47. progressGraphics.graphics.endFill()
      48. }

      绘制方法

      beginFill (color, alpha)

      指定一个简单的单色填充,随后调用其他 Graphics 方法 (例如:lineTo()drawCircle())在绘制时使用。

      NameTypeDefaultDescription
      colornumber0optional 填充的颜色
      alphanumber1optional 填充的 Alpha

      endFill ()

      对自上一次调用 beginFill() 方法以来添加的线条和形状应用填充。

      lineStyle ({ width, color, alpha, alignment, native })

      指定用于随后调用 Graphics 方法的线样式,例如:lineTo()方法 或 drawCircle()方法

      NameTypeDefaultDescription
      widthnumber0optional 画线的宽度,将更新对象存储的样式
      colornumber0x0optional 绘制线条的颜色,将更新对象存储的样式
      alphanumber1optional 绘制线条的 Alpha,将更新对象存储的样式
      alignmentnumber0.5optional 绘制线的对齐方式(0 = 内部,0.5 = 居中,1 = 外部)
      nativebooleanfalseoptional 如果为 true,则将使用 LINES 来代替 TRIANGLE_STRIP 绘制线条

      lineStyle (width, color, alpha, alignment, native)

      指定用于随后调用 Graphics 方法的线样式,例如:lineTo()方法或 drawCircle()方法

      NameTypeDefaultDescription
      widthnumber0optional 画线的宽度,将更新对象存储的样式
      colornumber0x0optional 绘制线条的颜色,将更新对象存储的样式
      alphanumber1optional 绘制线条的 Alpha,将更新对象存储的样式
      alignmentnumber0.5optional 绘制线的对齐方式(0 = 内部,0.5 = 居中,1 = 外部)
      nativebooleanfalseoptional 如果为 true,则将使用 LINES 来代替 TRIANGLE_STRIP 绘制线条

      lineTo (x, y)

      使用当前线样式从当前绘图位置到 (x, y )绘制一条线; 然后将当前图形位置设置为 (x, y)。

      NameTypeDescription
      xnumber要绘制到的 X 坐标
      ynumber要绘制到的 Y 坐标

      moveTo (x, y)

      将当前图形位置移动到 x,y。

      NameTypeDescription
      xnumber要移动到的 X 坐标
      ynumber要移动到的 Y 坐标

      quadraticCurveTo (cpX, cpY, toX, toY)

      计算二次贝塞尔曲线的点,然后绘制它。 基于: https://stackoverflow.com/questions/785097/how-do-i-implement-a-bezier-curve-in-c

      NameTypeDescription
      cpXnumber控制点 x
      cpYnumber控制点 y
      toXnumber目的点 x
      toYnumber目的点 y

      clear ()

      清除绘制到此 Graphics 对象的图形,并重置填充和线条样式设置。

      closePath ()

      关闭当前路径。

      预设图形

      arc (cx, cy, radius, startAngle, endAngle, anticlockwise)

      圆弧方法创建圆弧/曲线(用于创建圆或圆的一部分)。

      NameTypeDefaultDescription
      cxnumber圆心的 x 坐标
      cynumber圆心的 y 坐标
      radiusnumber圆的半径
      startAnglenumber起始角度,以弧度为单位(0 是圆弧的 3 点位置)
      endAnglenumber终止角度,以弧度为单位
      anticlockwisebooleanfalseoptional 指定图形是逆时针还是顺时针。 false 是默认值,表示顺时针,而true表示逆时针。

      arcTo (x1, y1, x2, y2, radius)

      arcTo()方法在画布上的两个切线之间创建弧/曲线。

      NameTypeDescription
      x1number圆弧的第一个切点的 x 坐标
      y1number圆弧的第一个切点的 y 坐标
      x2number圆弧末端的 x 坐标
      y2number圆弧末端的 y 坐标
      radiusnumber圆弧半径

      bezierCurveTo (cpX, cpY, cpX2, cpY2, toX, toY)

      计算贝塞尔曲线的点,然后绘制它。

      NameTypeDescription
      cpXnumber控制点 x
      cpYnumber控制点 y
      cpX2number第二控制点 x
      cpY2number第二控制点 y
      toXnumber目的点 x
      toYnumber目的点 y

      drawCircle (x, y, radius)

      绘制一个圆。

      NameTypeDescription
      xnumber圆心的 X 坐标
      ynumber圆心的 Y 坐标
      radiusnumber圆的半径

      drawEllipse (x, y, width, height)

      绘制一个椭圆。

      NameTypeDescription
      xnumber椭圆中心的 X 坐标
      ynumber椭圆中心的 Y 坐标
      widthnumber椭圆的半宽
      heightnumber椭圆的半高

      drawPolygon (path)

      使用指定的路径绘制多边形。

      NameTypeDescription
      pathnumber[] | Array.<{x,y}>用于构造多边形的路径数据。

      drawRect (x, y, width, height)

      绘制一个矩形。

      NameTypeDescription
      xnumber矩形左上角的 X 坐标
      ynumber矩形左上角的 Y 坐标
      widthnumber矩形的宽度
      heightnumber矩形的高度

      drawRoundedRect (x, y, width, height, radius)

      绘制一个带有圆角/斜角的矩形。

      NameTypeDescription
      xnumber矩形左上角的 X 坐标
      ynumber矩形左上角的 Y 坐标
      widthnumber矩形的宽度
      heightnumber矩形的高度
      radiusnumber矩形角度的半径

      drawStar (x, y, points, radius, innerRadius, rotation)

      用任意数量的点画一个星形。

      NameTypeDefaultDescription
      xnumber星的中心 X 位置
      ynumber星的中心 Y 位置
      pointsnumber星星的点数必须 > 1
      radiusnumber星星的外半径
      innerRadiusnumberoptional 点之间的内半径,默认为radius的一半
      rotationnumber0optional 星星自转的弧度,其中 0 为垂直

      ,