遮罩 Mask

      Mask 组件可以将 GameObject 的展示范围进行裁剪,使用前需要安装渲染器。

      Demo

      安装

      使用 NPM

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

      在浏览器中

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

      使用

      1. import { Game, GameObject, resource, RESOURCE_TYPE } from ‘@eva/eva.js’
      2. import { RendererSystem } from ‘@eva/plugin-renderer’
      3. import { Img, ImgSystem } from ‘@eva/plugin-renderer-img’
      4. import { Mask, MaskSystem, MASK_TYPE } from ‘@eva/plugin-renderer-mask’
      5. resource.addResource([
      6. {
      7. name: ‘heart’,
      8. type: RESOURCE_TYPE.IMAGE,
      9. src: {
      10. image: {
      11. type: ‘png’,
      12. url: ‘//gw.alicdn.com/bao/uploaded/TB1lVHuaET1gK0jSZFhXXaAtVXa-200-200.png’
      13. }
      14. },
      15. preload: false
      16. },
      17. {
      18. name: ‘tag’,
      19. type: RESOURCE_TYPE.SPRITE,
      20. src: {
      21. image: {
      22. type: ‘png’,
      23. url: ‘//gw.alicdn.com/mt/TB1KcVte4n1gK0jSZKPXXXvUXXa-150-50.png’
      24. },
      25. json: {
      26. type: ‘json’,
      27. url: ‘//gw.alicdn.com/mt/TB1d4lse4D1gK0jSZFsXXbldVXa.json’
      28. }
      29. },
      30. preload: true
      31. }
      32. ])
      33. const game = new Game({
      34. systems: [
      35. new RendererSystem({
      36. canvas: document.querySelector(‘#canvas’),
      37. width: 750,
      38. height: 1000
      39. }),
      40. new ImgSystem(),
      41. new MaskSystem()
      42. ]
      43. })
      44. game.scene.transform.size = {
      45. width: 750,
      46. height: 1000
      47. }
      48. const image = new GameObject(‘image’, {
      49. size: { width: 200, height: 200 }
      50. })
      51. image.addComponent(
      52. new Img({
      53. resource: ‘heart’
      54. })
      55. )
      56. game.scene.addChild(image)
      57. image.addComponent(
      58. new Mask({
      59. type: MASK_TYPE.Circle,
      60. style: {
      61. x: 100,
      62. y: 100,
      63. radius: 70
      64. }
      65. })
      66. )
      67. const image1 = new GameObject(‘image’, {
      68. size: { width: 200, height: 200 },
      69. position: { x: 400, y: 300 }
      70. })
      71. image1.addComponent(
      72. new Img({
      73. resource: ‘heart’
      74. })
      75. )
      76. image1.addComponent(
      77. new Mask({
      78. type: MASK_TYPE.Img,
      79. style: {
      80. width: 100,
      81. height: 100,
      82. x: 20,
      83. y: 20
      84. },
      85. resource: ‘heart’
      86. })
      87. )
      88. game.scene.addChild(image1)
      89. const image2 = new GameObject(‘image’, {
      90. size: { width: 200, height: 200 },
      91. position: { x: 100, y: 400 }
      92. })
      93. image2.addComponent(
      94. new Img({
      95. resource: ‘heart’
      96. })
      97. )
      98. image2.addComponent(
      99. new Mask({
      100. type: MASK_TYPE.Sprite,
      101. style: {
      102. width: 100,
      103. height: 100,
      104. x: 20,
      105. y: 20
      106. },
      107. resource: ‘tag’,
      108. spriteName: ‘task.png’
      109. })
      110. )
      111. game.scene.addChild(image2)

      参数

      type: MARK_TYPE

      style: object

      类型Type属性
      圆形MASK_TYPE.Circle{style: {x,y,radius}}
      椭圆MASK_TYPE.Ellipse{style:{x,y,width,height}}
      矩形MASK_TYPE.Rect{style:{x,y,width,height}}
      圆角矩形MASK_TYPE.RoundedRect{style:{x,y,width,height,radius}}
      多边形MASK_TYPE.Polygon{style: {paths: [x,y,x,y,x,y]}} 或者 {style: {paths: [{x,y},{x,y},{x,y}]}}
      图片MASK_TYPE.Img{resource,style:{x,y,width,height}}
      精灵图MASK_TYPE.Sprite{resource,spriteName,style:{x,y,width,height}}

      ,