UNPKG

phaser

Version:

A fast, free and fun HTML5 Game Framework for Desktop and Mobile web browsers from the team at Phaser Studio Inc.

842 lines (775 loc) 33.7 kB
/** * @author Richard Davey <rich@phaser.io> * @copyright 2013-2025 Phaser Studio Inc. * @license {@link https://opensource.org/licenses/MIT|MIT License} */ var Class = require('../../utils/Class'); var Effects = require('../../fx/'); var SpliceOne = require('../../utils/array/SpliceOne'); /** * @classdesc * The FX Component features a set of methods used for applying a range of special built-in effects to a Game Object. * * The effects include the following: * * * Barrel Distortion * * Bloom * * Blur * * Bokeh / Tilt Shift * * Circle Outline * * Color Matrix * * Glow * * Displacement * * Gradient * * Pixelate * * Shine * * Shadow * * Vignette * * Wipe / Reveal * * All Game Objects support Post FX. These are effects applied after the Game Object has been rendered. * * Texture-based Game Objects also support Pre FX, including: * * * Image * * Sprite * * TileSprite * * Text * * RenderTexture * * Video * * And any Game Object that extends the above. * * The difference between Pre FX and Post FX are that all Post FX take place in a canvas (renderer) sized frame buffer, * after the Game Object has been rendered. Pre FX, however, take place in a texture sized frame buffer, which is sized * based on the Game Object itself. The end result is then composited back to the main game canvas. For intensive effects, * such as blur, bloom or glow, which can require many iterations, this is a much more efficient way to apply the effect, * as only it only has to work on a Game Object sized texture and not all pixels in the canvas. * * In short, you should always try and use a Pre FX if you can. * * Due to the way that FX work they can be stacked-up. For example, you can apply a blur to a Game Object, then apply * a bloom effect to the same Game Object. The bloom effect will be applied to the blurred texture, not the original. * Keep the order in mind when stacking effects. * * All effects are WebGL only and do not have canvas counterparts. * * As you can appreciate, some effects are more expensive than others. For example, a bloom effect is going to be more * expensive than a simple color matrix effect, so please consider using them wisely and performance test your target * platforms early on in production. * * This component is created automatically by the `PostPipeline` class and does not need to be instantiated directly. * * @class FX * @memberof Phaser.GameObjects.Components * @constructor * @since 3.60.0 * @webglOnly * * @param {Phaser.GameObjects.GameObject} gameObject - A reference to the Game Object that owns this FX Component. * @param {boolean} isPost - Is this a Pre or Post FX Component? */ var FX = new Class({ initialize: function FX (gameObject, isPost) { /** * A reference to the Game Object that owns this FX Component. * * @name Phaser.GameObjects.Components.FX#gameObject * @type {Phaser.GameObjects.GameObject} * @readonly * @since 3.60.0 */ this.gameObject = gameObject; /** * Is this a Post FX Controller? or a Pre FX Controller? * * @name Phaser.GameObjects.Components.FX#isPost * @type {boolean} * @readonly * @since 3.60.0 */ this.isPost = isPost; /** * Has this FX Component been enabled? * * You should treat this property as read-only, although it is toggled * automaticaly during internal use. * * @name Phaser.GameObjects.Components.FX#enabled * @type {boolean} * @since 3.60.0 */ this.enabled = false; /** * An array containing all of the Pre FX Controllers that * have been added to this FX Component. They are processed in * the order they are added. * * This array is empty if this is a Post FX Component. * * @name Phaser.GameObjects.Components.FX#list * @type {Phaser.FX.Controller[]} * @since 3.60.0 */ this.list = []; /** * The amount of extra padding to be applied to this Game Object * when it is being rendered by a PreFX Pipeline. * * Lots of FX require additional spacing added to the texture the * Game Object uses, for example a glow or shadow effect, and this * method allows you to control how much extra padding is included * in addition to the texture size. * * You do not need to set this if you're only using Post FX. * * @name Phaser.GameObjects.Components.FX#padding * @type {number} * @default 0 * @since 3.60.0 */ this.padding = 0; }, /** * Sets the amount of extra padding to be applied to this Game Object * when it is being rendered by a PreFX Pipeline. * * Lots of FX require additional spacing added to the texture the * Game Object uses, for example a glow or shadow effect, and this * method allows you to control how much extra padding is included * in addition to the texture size. * * You do not need to set this if you're only using Post FX. * * @method Phaser.GameObjects.Components.FX#setPadding * @webglOnly * @since 3.60.0 * * @param {number} [padding=0] - The amount of padding to add to this Game Object. * * @return {this} This Game Object instance. */ setPadding: function (padding) { if (padding === undefined) { padding = 0; } this.padding = padding; return this.gameObject; }, /** * This callback is invoked when this Game Object is copied by a PreFX Pipeline. * * This happens when the pipeline uses its `copySprite` method. * * It's invoked prior to the copy, allowing you to set shader uniforms, etc on the pipeline. * * @method Phaser.GameObjects.Components.FX#onFXCopy * @since 3.60.0 * * @param {Phaser.Renderer.WebGL.Pipelines.PreFXPipeline} pipeline - The PreFX Pipeline that invoked this callback. */ onFXCopy: function () { }, /** * This callback is invoked when this Game Object is rendered by a PreFX Pipeline. * * This happens when the pipeline uses its `drawSprite` method. * * It's invoked prior to the draw, allowing you to set shader uniforms, etc on the pipeline. * * @method Phaser.GameObjects.Components.FX#onFX * @since 3.60.0 * * @param {Phaser.Renderer.WebGL.Pipelines.PreFXPipeline} pipeline - The PreFX Pipeline that invoked this callback. */ onFX: function () { }, /** * Enables this FX Component and applies the FXPipeline to the parent Game Object. * * This is called automatically whenever you call a method such as `addBloom`, etc. * * You can check the `enabled` property to see if the Game Object is already enabled, or not. * * This only applies to Pre FX. Post FX are always enabled. * * @method Phaser.GameObjects.Components.FX#enable * @since 3.60.0 * * @param {number} [padding=0] - The amount of padding to add to this Game Object. */ enable: function (padding) { if (this.isPost) { return; } var renderer = this.gameObject.scene.sys.renderer; if (renderer && renderer.pipelines) { this.gameObject.pipeline = renderer.pipelines.FX_PIPELINE; if (padding !== undefined) { this.padding = padding; } this.enabled = true; } else { this.enabled = false; } }, /** * Destroys and removes all FX Controllers that are part of this FX Component, * then disables it. * * If this is a Pre FX Component it will only remove Pre FX. * If this is a Post FX Component it will only remove Post FX. * * To remove both at once use the `GameObject.clearFX` method instead. * * @method Phaser.GameObjects.Components.FX#clear * @since 3.60.0 * * @return {this} This Game Object instance. */ clear: function () { if (this.isPost) { this.gameObject.resetPostPipeline(true); } else { var list = this.list; for (var i = 0; i < list.length; i++) { list[i].destroy(); } this.list = []; } this.enabled = false; return this.gameObject; }, /** * Searches for the given FX Controller within this FX Component. * * If found, the controller is removed from this component and then destroyed. * * @method Phaser.GameObjects.Components.FX#remove * @since 3.60.0 * * @generic {Phaser.FX.Controller} T * @genericUse {T} - [fx] * * @param {Phaser.FX.Controller|Phaser.Display.ColorMatrix} fx - The FX Controller to remove from this FX Component. * * @return {this} This Game Object instance. */ remove: function (fx) { var i; if (this.isPost) { var pipelines = this.gameObject.getPostPipeline(String(fx.type)); if (!Array.isArray(pipelines)) { pipelines = [ pipelines ]; } for (i = 0; i < pipelines.length; i++) { var pipeline = pipelines[i]; if (pipeline.controller === fx) { this.gameObject.removePostPipeline(pipeline); fx.destroy(); break; } } } else { var list = this.list; for (i = 0; i < list.length; i++) { if (list[i] === fx) { SpliceOne(list, i); fx.destroy(); } } } return this.gameObject; }, /** * Disables this FX Component. * * This will reset the pipeline on the Game Object that owns this component back to its * default and flag this component as disabled. * * You can re-enable it again by calling `enable` for Pre FX or by adding an FX for Post FX. * * Optionally, set `clear` to destroy all current FX Controllers. * * @method Phaser.GameObjects.Components.FX#disable * @since 3.60.0 * * @param {boolean} [clear=false] - Destroy and remove all FX Controllers that are part of this component. * * @return {this} This Game Object instance. */ disable: function (clear) { if (clear === undefined) { clear = false; } if (!this.isPost) { this.gameObject.resetPipeline(); } this.enabled = false; if (clear) { this.clear(); } return this.gameObject; }, /** * Adds the given FX Controler to this FX Component. * * Note that adding an FX Controller does not remove any existing FX. They all stack-up * on-top of each other. If you don't want this, make sure to call either `remove` or * `clear` first. * * @method Phaser.GameObjects.Components.FX#add * @since 3.60.0 * * @generic {Phaser.FX.Controller} T * @genericUse {T} - [fx] * * @param {Phaser.FX.Controller} fx - The FX Controller to add to this FX Component. * @param {object} [config] - Optional configuration object that is passed to the pipeline during instantiation. * * @return {Phaser.FX.Controller} The FX Controller. */ add: function (fx, config) { if (this.isPost) { var type = String(fx.type); this.gameObject.setPostPipeline(type, config); var pipeline = this.gameObject.getPostPipeline(type); if (pipeline) { if (Array.isArray(pipeline)) { pipeline = pipeline.pop(); } if (pipeline) { pipeline.controller = fx; } return fx; } } else { if (!this.enabled) { this.enable(); } this.list.push(fx); return fx; } }, /** * Adds a Glow effect. * * The glow effect is a visual technique that creates a soft, luminous halo around game objects, * characters, or UI elements. This effect is used to emphasize importance, enhance visual appeal, * or convey a sense of energy, magic, or otherworldly presence. The effect can also be set on * the inside of the Game Object. The color and strength of the glow can be modified. * * @method Phaser.GameObjects.Components.FX#addGlow * @since 3.60.0 * * @param {number} [color=0xffffff] - The color of the glow effect as a number value. * @param {number} [outerStrength=4] - The strength of the glow outward from the edge of the Sprite. * @param {number} [innerStrength=0] - The strength of the glow inward from the edge of the Sprite. * @param {boolean} [knockout=false] - If `true` only the glow is drawn, not the texture itself. * @param {number} [quality=0.1] - Only available for PostFX. Sets the quality of this Glow effect. Default is 0.1. Cannot be changed post-creation. * @param {number} [distance=10] - Only available for PostFX. Sets the distance of this Glow effect. Default is 10. Cannot be changed post-creation. * * @return {Phaser.FX.Glow} The Glow FX Controller. */ addGlow: function (color, outerStrength, innerStrength, knockout, quality, distance) { return this.add(new Effects.Glow(this.gameObject, color, outerStrength, innerStrength, knockout), { quality: quality, distance: distance }); }, /** * Adds a Shadow effect. * * The shadow effect is a visual technique used to create the illusion of depth and realism by adding darker, * offset silhouettes or shapes beneath game objects, characters, or environments. These simulated shadows * help to enhance the visual appeal and immersion, making the 2D game world appear more dynamic and three-dimensional. * * @method Phaser.GameObjects.Components.FX#addShadow * @since 3.60.0 * * @param {number} [x=0] - The horizontal offset of the shadow effect. * @param {number} [y=0] - The vertical offset of the shadow effect. * @param {number} [decay=0.1] - The amount of decay for shadow effect. * @param {number} [power=1] - The power of the shadow effect. * @param {number} [color=0x000000] - The color of the shadow. * @param {number} [samples=6] - The number of samples that the shadow effect will run for. An integer between 1 and 12. * @param {number} [intensity=1] - The intensity of the shadow effect. * * @return {Phaser.FX.Shadow} The Shadow FX Controller. */ addShadow: function (x, y, decay, power, color, samples, intensity) { return this.add(new Effects.Shadow(this.gameObject, x, y, decay, power, color, samples, intensity)); }, /** * Adds a Pixelate effect. * * The pixelate effect is a visual technique that deliberately reduces the resolution or detail of an image, * creating a blocky or mosaic appearance composed of large, visible pixels. This effect can be used for stylistic * purposes, as a homage to retro gaming, or as a means to obscure certain elements within the game, such as * during a transition or to censor specific content. * * @method Phaser.GameObjects.Components.FX#addPixelate * @since 3.60.0 * * @param {number} [amount=1] - The amount of pixelation to apply. * * @return {Phaser.FX.Pixelate} The Pixelate FX Controller. */ addPixelate: function (amount) { return this.add(new Effects.Pixelate(this.gameObject, amount)); }, /** * Adds a Vignette effect. * * The vignette effect is a visual technique where the edges of the screen, or a Game Object, gradually darken or blur, * creating a frame-like appearance. This effect is used to draw the player's focus towards the central action or subject, * enhance immersion, and provide a cinematic or artistic quality to the game's visuals. * * @method Phaser.GameObjects.Components.FX#addVignette * @since 3.60.0 * * @param {number} [x=0.5] - The horizontal offset of the vignette effect. This value is normalized to the range 0 to 1. * @param {number} [y=0.5] - The vertical offset of the vignette effect. This value is normalized to the range 0 to 1. * @param {number} [radius=0.5] - The radius of the vignette effect. This value is normalized to the range 0 to 1. * @param {number} [strength=0.5] - The strength of the vignette effect. * * @return {Phaser.FX.Vignette} The Vignette FX Controller. */ addVignette: function (x, y, radius, strength) { return this.add(new Effects.Vignette(this.gameObject, x, y, radius, strength)); }, /** * Adds a Shine effect. * * The shine effect is a visual technique that simulates the appearance of reflective * or glossy surfaces by passing a light beam across a Game Object. This effect is used to * enhance visual appeal, emphasize certain features, and create a sense of depth or * material properties. * * @method Phaser.GameObjects.Components.FX#addShine * @since 3.60.0 * * @param {number} [speed=0.5] - The speed of the Shine effect. * @param {number} [lineWidth=0.5] - The line width of the Shine effect. * @param {number} [gradient=3] - The gradient of the Shine effect. * @param {boolean} [reveal=false] - Does this Shine effect reveal or get added to its target? * * @return {Phaser.FX.Shine} The Shine FX Controller. */ addShine: function (speed, lineWidth, gradient, reveal) { return this.add(new Effects.Shine(this.gameObject, speed, lineWidth, gradient, reveal)); }, /** * Adds a Blur effect. * * A Gaussian blur is the result of blurring an image by a Gaussian function. It is a widely used effect, * typically to reduce image noise and reduce detail. The visual effect of this blurring technique is a * smooth blur resembling that of viewing the image through a translucent screen, distinctly different * from the bokeh effect produced by an out-of-focus lens or the shadow of an object under usual illumination. * * @method Phaser.GameObjects.Components.FX#addBlur * @since 3.60.0 * * @param {number} [quality=0] - The quality of the blur effect. Can be either 0 for Low Quality, 1 for Medium Quality or 2 for High Quality. * @param {number} [x=2] - The horizontal offset of the blur effect. * @param {number} [y=2] - The vertical offset of the blur effect. * @param {number} [strength=1] - The strength of the blur effect. * @param {number} [color=0xffffff] - The color of the blur, as a hex value. * @param {number} [steps=4] - The number of steps to run the blur effect for. This value should always be an integer. * * @return {Phaser.FX.Blur} The Blur FX Controller. */ addBlur: function (quality, x, y, strength, color, steps) { return this.add(new Effects.Blur(this.gameObject, quality, x, y, strength, color, steps)); }, /** * Adds a Gradient effect. * * The gradient overlay effect is a visual technique where a smooth color transition is applied over Game Objects, * such as sprites or UI components. This effect is used to enhance visual appeal, emphasize depth, or create * stylistic and atmospheric variations. It can also be utilized to convey information, such as representing * progress or health status through color changes. * * @method Phaser.GameObjects.Components.FX#addGradient * @since 3.60.0 * * @param {number} [color1=0xff0000] - The first gradient color, given as a number value. * @param {number} [color2=0x00ff00] - The second gradient color, given as a number value. * @param {number} [alpha=0.2] - The alpha value of the gradient effect. * @param {number} [fromX=0] - The horizontal position the gradient will start from. This value is normalized, between 0 and 1, and is not in pixels. * @param {number} [fromY=0] - The vertical position the gradient will start from. This value is normalized, between 0 and 1, and is not in pixels. * @param {number} [toX=0] - The horizontal position the gradient will end at. This value is normalized, between 0 and 1, and is not in pixels. * @param {number} [toY=1] - The vertical position the gradient will end at. This value is normalized, between 0 and 1, and is not in pixels. * @param {number} [size=0] - How many 'chunks' the gradient is divided in to, as spread over the entire height of the texture. Leave this at zero for a smooth gradient, or set higher for a more retro chunky effect. * * @return {Phaser.FX.Gradient} The Gradient FX Controller. */ addGradient: function (color1, color2, alpha, fromX, fromY, toX, toY, size) { return this.add(new Effects.Gradient(this.gameObject, color1, color2, alpha, fromX, fromY, toX, toY, size)); }, /** * Adds a Bloom effect. * * Bloom is an effect used to reproduce an imaging artifact of real-world cameras. * The effect produces fringes of light extending from the borders of bright areas in an image, * contributing to the illusion of an extremely bright light overwhelming the * camera or eye capturing the scene. * * @method Phaser.GameObjects.Components.FX#addBloom * @since 3.60.0 * * @param {number} [color] - The color of the Bloom, as a hex value. * @param {number} [offsetX=1] - The horizontal offset of the bloom effect. * @param {number} [offsetY=1] - The vertical offset of the bloom effect. * @param {number} [blurStrength=1] - The strength of the blur process of the bloom effect. * @param {number} [strength=1] - The strength of the blend process of the bloom effect. * @param {number} [steps=4] - The number of steps to run the Bloom effect for. This value should always be an integer. * * @return {Phaser.FX.Bloom} The Bloom FX Controller. */ addBloom: function (color, offsetX, offsetY, blurStrength, strength, steps) { return this.add(new Effects.Bloom(this.gameObject, color, offsetX, offsetY, blurStrength, strength, steps)); }, /** * Adds a ColorMatrix effect. * * The color matrix effect is a visual technique that involves manipulating the colors of an image * or scene using a mathematical matrix. This process can adjust hue, saturation, brightness, and contrast, * allowing developers to create various stylistic appearances or mood settings within the game. * Common applications include simulating different lighting conditions, applying color filters, * or achieving a specific visual style. * * @method Phaser.GameObjects.Components.FX#addColorMatrix * @since 3.60.0 * * @return {Phaser.FX.ColorMatrix} The ColorMatrix FX Controller. */ addColorMatrix: function () { return this.add(new Effects.ColorMatrix(this.gameObject)); }, /** * Adds a Circle effect. * * This effect will draw a circle around the texture of the Game Object, effectively masking off * any area outside of the circle without the need for an actual mask. You can control the thickness * of the circle, the color of the circle and the color of the background, should the texture be * transparent. You can also control the feathering applied to the circle, allowing for a harsh or soft edge. * * Please note that adding this effect to a Game Object will not change the input area or physics body of * the Game Object, should it have one. * * @method Phaser.GameObjects.Components.FX#addCircle * @since 3.60.0 * * @param {number} [thickness=8] - The width of the circle around the texture, in pixels. * @param {number} [color=0xfeedb6] - The color of the circular ring, given as a number value. * @param {number} [backgroundColor=0xff0000] - The color of the background, behind the texture, given as a number value. * @param {number} [scale=1] - The scale of the circle. The default scale is 1, which is a circle the full size of the underlying texture. * @param {number} [feather=0.005] - The amount of feathering to apply to the circle from the ring. * * @return {Phaser.FX.Circle} The Circle FX Controller. */ addCircle: function (thickness, color, backgroundColor, scale, feather) { return this.add(new Effects.Circle(this.gameObject, thickness, color, backgroundColor, scale, feather)); }, /** * Adds a Barrel effect. * * A barrel effect allows you to apply either a 'pinch' or 'expand' distortion to * a Game Object. The amount of the effect can be modified in real-time. * * @method Phaser.GameObjects.Components.FX#addBarrel * @since 3.60.0 * * @param {number} [amount=1] - The amount of distortion applied to the barrel effect. A value of 1 is no distortion. Typically keep this within +- 1. * * @return {Phaser.FX.Barrel} The Barrel FX Controller. */ addBarrel: function (amount) { return this.add(new Effects.Barrel(this.gameObject, amount)); }, /** * Adds a Displacement effect. * * The displacement effect is a visual technique that alters the position of pixels in an image * or texture based on the values of a displacement map. This effect is used to create the illusion * of depth, surface irregularities, or distortion in otherwise flat elements. It can be applied to * characters, objects, or backgrounds to enhance realism, convey movement, or achieve various * stylistic appearances. * * @method Phaser.GameObjects.Components.FX#addDisplacement * @since 3.60.0 * * @param {string} [texture='__WHITE'] - The unique string-based key of the texture to use for displacement, which must exist in the Texture Manager. * @param {number} [x=0.005] - The amount of horizontal displacement to apply. A very small float number, such as 0.005. * @param {number} [y=0.005] - The amount of vertical displacement to apply. A very small float number, such as 0.005. * * @return {Phaser.FX.Displacement} The Displacement FX Controller. */ addDisplacement: function (texture, x, y) { return this.add(new Effects.Displacement(this.gameObject, texture, x, y)); }, /** * Adds a Wipe effect. * * The wipe or reveal effect is a visual technique that gradually uncovers or conceals elements * in the game, such as images, text, or scene transitions. This effect is often used to create * a sense of progression, reveal hidden content, or provide a smooth and visually appealing transition * between game states. * * You can set both the direction and the axis of the wipe effect. The following combinations are possible: * * * left to right: direction 0, axis 0 * * right to left: direction 1, axis 0 * * top to bottom: direction 1, axis 1 * * bottom to top: direction 1, axis 0 * * It is up to you to set the `progress` value yourself, i.e. via a Tween, in order to transition the effect. * * @method Phaser.GameObjects.Components.FX#addWipe * @since 3.60.0 * * @param {number} [wipeWidth=0.1] - The width of the wipe effect. This value is normalized in the range 0 to 1. * @param {number} [direction=0] - The direction of the wipe effect. Either 0 or 1. Set in conjunction with the axis property. * @param {number} [axis=0] - The axis of the wipe effect. Either 0 or 1. Set in conjunction with the direction property. * * @return {Phaser.FX.Wipe} The Wipe FX Controller. */ addWipe: function (wipeWidth, direction, axis) { return this.add(new Effects.Wipe(this.gameObject, wipeWidth, direction, axis)); }, /** * Adds a Reveal Wipe effect. * * The wipe or reveal effect is a visual technique that gradually uncovers or conceals elements * in the game, such as images, text, or scene transitions. This effect is often used to create * a sense of progression, reveal hidden content, or provide a smooth and visually appealing transition * between game states. * * You can set both the direction and the axis of the wipe effect. The following combinations are possible: * * * left to right: direction 0, axis 0 * * right to left: direction 1, axis 0 * * top to bottom: direction 1, axis 1 * * bottom to top: direction 1, axis 0 * * It is up to you to set the `progress` value yourself, i.e. via a Tween, in order to transition the effect. * * @method Phaser.GameObjects.Components.FX#addReveal * @since 3.60.0 * * @param {number} [wipeWidth=0.1] - The width of the wipe effect. This value is normalized in the range 0 to 1. * @param {number} [direction=0] - The direction of the wipe effect. Either 0 or 1. Set in conjunction with the axis property. * @param {number} [axis=0] - The axis of the wipe effect. Either 0 or 1. Set in conjunction with the direction property. * * @return {Phaser.FX.Wipe} The Wipe FX Controller. */ addReveal: function (wipeWidth, direction, axis) { return this.add(new Effects.Wipe(this.gameObject, wipeWidth, direction, axis, true)); }, /** * Adds a Bokeh effect. * * Bokeh refers to a visual effect that mimics the photographic technique of creating a shallow depth of field. * This effect is used to emphasize the game's main subject or action, by blurring the background or foreground * elements, resulting in a more immersive and visually appealing experience. It is achieved through rendering * techniques that simulate the out-of-focus areas, giving a sense of depth and realism to the game's graphics. * * See also Tilt Shift. * * @method Phaser.GameObjects.Components.FX#addBokeh * @since 3.60.0 * * @param {number} [radius=0.5] - The radius of the bokeh effect. * @param {number} [amount=1] - The amount of the bokeh effect. * @param {number} [contrast=0.2] - The color contrast of the bokeh effect. * * @return {Phaser.FX.Bokeh} The Bokeh FX Controller. */ addBokeh: function (radius, amount, contrast) { return this.add(new Effects.Bokeh(this.gameObject, radius, amount, contrast)); }, /** * Adds a Tilt Shift effect. * * This Bokeh effect can also be used to generate a Tilt Shift effect, which is a technique used to create a miniature * effect by blurring everything except a small area of the image. This effect is achieved by blurring the * top and bottom elements, while keeping the center area in focus. * * See also Bokeh. * * @method Phaser.GameObjects.Components.FX#addTiltShift * @since 3.60.0 * * @param {number} [radius=0.5] - The radius of the bokeh effect. * @param {number} [amount=1] - The amount of the bokeh effect. * @param {number} [contrast=0.2] - The color contrast of the bokeh effect. * @param {number} [blurX=1] - The amount of horizontal blur. * @param {number} [blurY=1] - The amount of vertical blur. * @param {number} [strength=1] - The strength of the blur. * * @return {Phaser.FX.Bokeh} The Bokeh TiltShift FX Controller. */ addTiltShift: function (radius, amount, contrast, blurX, blurY, strength) { return this.add(new Effects.Bokeh(this.gameObject, radius, amount, contrast, true, blurX, blurY, strength)); }, /** * Destroys this FX Component. * * Called automatically when Game Objects are destroyed. * * @method Phaser.GameObjects.Components.FX#destroy * @since 3.60.0 */ destroy: function () { this.clear(); this.gameObject = null; } }); module.exports = FX;