Skip to content

Commit

Permalink
The Container.setScrollFactor method has a new optional argument `u…
Browse files Browse the repository at this point in the history
…pdateChildren`. If set, it will change the `scrollFactor` values of all the Container children as well as the Container. Fix #4466 #4475
  • Loading branch information
photonstorm committed Apr 24, 2019
1 parent 61011d3 commit f4a86fd
Show file tree
Hide file tree
Showing 2 changed files with 98 additions and 2 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Expand Up @@ -82,6 +82,7 @@ Notes:
* `CSSFile` is a new Loader FileType that allows you to load css into the current document via the normal Phaser Loader, using the `load.css` method. As such, you can chain it with other load calls, load via config, use as part of a pack load or any other option available to all loader filetypes. The CSS is applied immediately to the document.
* `MultiScriptFile` is a new Loader FileType that allows you to load multiple script files into the document via the Phaser Loader, using the new `load.scripts` method. The difference between this and `load.script` is that you must pass an array of script file URLs to this method and they will be loaded in parallel but _processed_ (i.e. added to the document) in the exact order specified in the array. This allows you to load a bundle of scripts that have dependencies on each other.
* `Key.getDuration` is a new method that will return the duration, in ms, that the Key has been held down for. If the Key isn't down it will return zero.
* The `Container.setScrollFactor` method has a new optional argument `updateChildren`. If set, it will change the `scrollFactor` values of all the Container children as well as the Container. Fix #4466 #4475 (thanks @pinkkis @enriqueto)

### Updates

Expand Down
99 changes: 97 additions & 2 deletions src/gameobjects/container/Container.js
Expand Up @@ -63,7 +63,6 @@ var Vector2 = require('../../math/Vector2');
* @extends Phaser.GameObjects.Components.ComputedSize
* @extends Phaser.GameObjects.Components.Depth
* @extends Phaser.GameObjects.Components.Mask
* @extends Phaser.GameObjects.Components.ScrollFactor
* @extends Phaser.GameObjects.Components.Transform
* @extends Phaser.GameObjects.Components.Visible
*
Expand All @@ -82,7 +81,6 @@ var Container = new Class({
Components.ComputedSize,
Components.Depth,
Components.Mask,
Components.ScrollFactor,
Components.Transform,
Components.Visible,
Render
Expand Down Expand Up @@ -193,6 +191,60 @@ var Container = new Class({
*/
this._sysEvents = scene.sys.events;

/**
* The horizontal scroll factor of this Container.
*
* The scroll factor controls the influence of the movement of a Camera upon this Container.
*
* When a camera scrolls it will change the location at which this Container is rendered on-screen.
* It does not change the Containers actual position values.
*
* For a Container, setting this value will only update the Container itself, not its children.
* If you wish to change the scrollFactor of the children as well, use the `setScrollFactor` method.
*
* A value of 1 means it will move exactly in sync with a camera.
* A value of 0 means it will not move at all, even if the camera moves.
* Other values control the degree to which the camera movement is mapped to this Container.
*
* Please be aware that scroll factor values other than 1 are not taken in to consideration when
* calculating physics collisions. Bodies always collide based on their world position, but changing
* the scroll factor is a visual adjustment to where the textures are rendered, which can offset
* them from physics bodies if not accounted for in your code.
*
* @name Phaser.GameObjects.Container#scrollFactorX
* @type {number}
* @default 1
* @since 3.0.0
*/
this.scrollFactorX = 1;

/**
* The vertical scroll factor of this Container.
*
* The scroll factor controls the influence of the movement of a Camera upon this Container.
*
* When a camera scrolls it will change the location at which this Container is rendered on-screen.
* It does not change the Containers actual position values.
*
* For a Container, setting this value will only update the Container itself, not its children.
* If you wish to change the scrollFactor of the children as well, use the `setScrollFactor` method.
*
* A value of 1 means it will move exactly in sync with a camera.
* A value of 0 means it will not move at all, even if the camera moves.
* Other values control the degree to which the camera movement is mapped to this Container.
*
* Please be aware that scroll factor values other than 1 are not taken in to consideration when
* calculating physics collisions. Bodies always collide based on their world position, but changing
* the scroll factor is a visual adjustment to where the textures are rendered, which can offset
* them from physics bodies if not accounted for in your code.
*
* @name Phaser.GameObjects.Container#scrollFactorY
* @type {number}
* @default 1
* @since 3.0.0
*/
this.scrollFactorY = 1;

this.setPosition(x, y);

this.clearAlpha();
Expand Down Expand Up @@ -1072,6 +1124,49 @@ var Container = new Class({
return this;
},

/**
* Sets the scroll factor of this Container and optionally all of its children.
*
* The scroll factor controls the influence of the movement of a Camera upon this Game Object.
*
* When a camera scrolls it will change the location at which this Game Object is rendered on-screen.
* It does not change the Game Objects actual position values.
*
* A value of 1 means it will move exactly in sync with a camera.
* A value of 0 means it will not move at all, even if the camera moves.
* Other values control the degree to which the camera movement is mapped to this Game Object.
*
* Please be aware that scroll factor values other than 1 are not taken in to consideration when
* calculating physics collisions. Bodies always collide based on their world position, but changing
* the scroll factor is a visual adjustment to where the textures are rendered, which can offset
* them from physics bodies if not accounted for in your code.
*
* @method Phaser.GameObjects.Container#setScrollFactor
* @since 3.0.0
*
* @param {number} x - The horizontal scroll factor of this Game Object.
* @param {number} [y=x] - The vertical scroll factor of this Game Object. If not set it will use the `x` value.
* @param {boolean} [updateChildren=false] - Apply this scrollFactor to all Container children as well?
*
* @return {this} This Game Object instance.
*/
setScrollFactor: function (x, y, updateChildren)
{
if (y === undefined) { y = x; }
if (updateChildren === undefined) { updateChildren = false; }

this.scrollFactorX = x;
this.scrollFactorY = y;

if (updateChildren)
{
ArrayUtils.SetAll(this.list, 'scrollFactorX', x);
ArrayUtils.SetAll(this.list, 'scrollFactorY', y);
}

return this;
},

/**
* The number of Game Objects inside this Container.
*
Expand Down

0 comments on commit f4a86fd

Please sign in to comment.