Mask

The Mask component can cut the display range of the GameObject, and a renderer needs to be installed before use.

Demo

Install

With NPM

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

In Browser

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

Usage

  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)

Options

type: MARK_TYPE

style: object

TypeTypeAttribute
CircleMASK_TYPE.Circle{style: {x,y,radius}}
EllipseMASK_TYPE.Ellipse{style:{x,y,width,height}}
RectangleMASK_TYPE.Rect{style:{x,y,width,height}}
Rounded rectangleMASK_TYPE.RoundedRect{style:{x,y,width,height,radius}}
PolygonMASK_TYPE.Polygon{style: {paths: [x,y,x,y,x,y]}} or {style: {paths: [{x,y},{x,y},{x ,y}]}}
PictureMASK_TYPE.Img{resource,style:{x,y,width,height}}
Sprite imageMASK_TYPE.Sprite{resource,spriteName,style:{x,y,width,height}}