The BitmapMask now registers itself with the Game Object Factory. This means you can do this.add.bitmapMask() from within a Scene, for easier creation.

This commit is contained in:
Richard Davey 2022-10-03 22:13:25 +01:00
parent 739b8c5b94
commit 8bfc0b2eee

View file

@ -5,6 +5,7 @@
*/
var Class = require('../../utils/Class');
var GameObjectFactory = require('../../gameobjects/GameObjectFactory');
/**
* @classdesc
@ -187,4 +188,49 @@ var BitmapMask = new Class({
});
/**
* A Bitmap Mask combines the alpha (opacity) of a masked pixel with the alpha of another pixel.
* Unlike the Geometry Mask, which is a clipping path, a Bitmap Mask behaves like an alpha mask,
* not a clipping path. It is only available when using the WebGL Renderer.
*
* A Bitmap Mask can use any Game Object to determine the alpha of each pixel of the masked Game Object(s).
* For any given point of a masked Game Object's texture, the pixel's alpha will be multiplied by the alpha
* of the pixel at the same position in the Bitmap Mask's Game Object. The color of the pixel from the
* Bitmap Mask doesn't matter.
*
* For example, if a pure blue pixel with an alpha of 0.95 is masked with a pure red pixel with an
* alpha of 0.5, the resulting pixel will be pure blue with an alpha of 0.475. Naturally, this means
* that a pixel in the mask with an alpha of 0 will hide the corresponding pixel in all masked Game Objects
* A pixel with an alpha of 1 in the masked Game Object will receive the same alpha as the
* corresponding pixel in the mask.
*
* Note: You cannot combine Bitmap Masks and Blend Modes on the same Game Object. You can, however,
* combine Geometry Masks and Blend Modes together.
*
* The Bitmap Mask's location matches the location of its Game Object, not the location of the
* masked objects. Moving or transforming the underlying Game Object will change the mask
* (and affect the visibility of any masked objects), whereas moving or transforming a masked object
* will not affect the mask.
*
* The Bitmap Mask will not render its Game Object by itself. If the Game Object is not in a
* Scene's display list, it will only be used for the mask and its full texture will not be directly
* visible. Adding the underlying Game Object to a Scene will not cause any problems - it will
* render as a normal Game Object and will also serve as a mask.
*
* @method Phaser.GameObjects.GameObjectFactory#bitmapMask
* @since 3.60.0
*
* @param {Phaser.GameObjects.GameObject} [maskObject] - The Game Object that will be used as the mask. If `null` it will generate an Image Game Object using the rest of the arguments.
* @param {number} [x] - If creating a Game Object, the horizontal position in the world.
* @param {number} [y] - If creating a Game Object, the vertical position in the world.
* @param {(string|Phaser.Textures.Texture)} [texture] - If creating a Game Object, the key, or instance of the Texture it will use to render with, as stored in the Texture Manager.
* @param {(string|number|Phaser.Textures.Frame)} [frame] - If creating a Game Object, an optional frame from the Texture this Game Object is rendering with.
*
* @return {Phaser.Display.Masks.BitmapMask} The Bitmap Mask that was created.
*/
GameObjectFactory.register('bitmapMask', function (maskObject, x, y, key, frame)
{
return new BitmapMask(this.scene, maskObject, x, y, key, frame);
});
module.exports = BitmapMask;