On this page
Class: Phaser.Physics.Arcade.Body
Constructor
new Body(sprite)
The Physics Body is linked to a single Sprite. All physics operations should be performed against the body rather than
the Sprite itself. For example you can set the velocity, acceleration, bounce values etc all on the Body.
Parameters
Name | Type | Description |
---|---|---|
sprite |
Phaser.Sprite | The Sprite object this physics body belongs to. |
- Source code: physics/arcade/Body.js (Line 15)
Public Properties
- Source code: physics/arcade/Body.js (Line 160)
- Default Value
-
- true
- Source code: physics/arcade/Body.js (Line 171)
- Default Value
-
- true
- Source code: physics/arcade/Body.js (Line 78)
- Source code: physics/arcade/Body.js (Line 288)
- Source code: physics/arcade/Body.js (Line 264)
- Source code: physics/arcade/Body.js (Line 270)
- Source code: physics/arcade/Body.js (Line 258)
- Source code: physics/arcade/Body.js (Line 390)
- Source code: physics/arcade/Body.js (Line 1370)
- Source code: physics/arcade/Body.js (Line 181)
- Source code: physics/arcade/Body.js (Line 139)
- Source code: physics/arcade/Body.js (Line 370)
- Source code: physics/arcade/Body.js (Line 361)
- Source code: physics/arcade/Body.js (Line 323)
- Source code: physics/arcade/Body.js (Line 331)
- Source code: physics/arcade/Body.js (Line 155)
- Source code: physics/arcade/Body.js (Line 402)
- Source code: physics/arcade/Body.js (Line 165)
- Source code: physics/arcade/Body.js (Line 355)
- Default Value
-
- true
- Source code: physics/arcade/Body.js (Line 36)
- Source code: physics/arcade/Body.js (Line 300)
- Source code: physics/arcade/Body.js (Line 252)
- Source code: physics/arcade/Body.js (Line 25)
- Source code: physics/arcade/Body.js (Line 176)
- Source code: physics/arcade/Body.js (Line 133)
- Source code: physics/arcade/Body.js (Line 127)
- Source code: physics/arcade/Body.js (Line 103)
- Source code: physics/arcade/Body.js (Line 306)
- Source code: physics/arcade/Body.js (Line 45)
- Source code: physics/arcade/Body.js (Line 422)
- Source code: physics/arcade/Body.js (Line 1327)
- Default Value
-
- 1
- Source code: physics/arcade/Body.js (Line 282)
- Default Value
-
- 1000
- Source code: physics/arcade/Body.js (Line 276)
- Source code: physics/arcade/Body.js (Line 247)
- Source code: physics/arcade/Body.js (Line 467)
- Source code: physics/arcade/Body.js (Line 472)
- Default Value
-
- true
- Source code: physics/arcade/Body.js (Line 315)
- Source code: physics/arcade/Body.js (Line 150)
- Source code: physics/arcade/Body.js (Line 60)
- Source code: physics/arcade/Body.js (Line 221)
- Source code: physics/arcade/Body.js (Line 462)
- Source code: physics/arcade/Body.js (Line 241)
- Source code: physics/arcade/Body.js (Line 201)
- Source code: physics/arcade/Body.js (Line 349)
- Source code: physics/arcade/Body.js (Line 337)
- Source code: physics/arcade/Body.js (Line 343)
- Source code: physics/arcade/Body.js (Line 66)
- Source code: physics/arcade/Body.js (Line 91)
- Source code: physics/arcade/Body.js (Line 72)
- Source code: physics/arcade/Body.js (Line 55)
- Source code: physics/arcade/Body.js (Line 1341)
- Source code: physics/arcade/Body.js (Line 85)
- Source code: physics/arcade/Body.js (Line 407)
- Source code: physics/arcade/Body.js (Line 115)
- Source code: physics/arcade/Body.js (Line 109)
- Source code: physics/arcade/Body.js (Line 294)
- Source code: physics/arcade/Body.js (Line 20)
- Source code: physics/arcade/Body.js (Line 427)
- Source code: physics/arcade/Body.js (Line 417)
- Source code: physics/arcade/Body.js (Line 397)
- Source code: physics/arcade/Body.js (Line 1356)
- Source code: physics/arcade/Body.js (Line 377)
- Source code: physics/arcade/Body.js (Line 30)
- Source code: physics/arcade/Body.js (Line 144)
- Source code: physics/arcade/Body.js (Line 383)
- Source code: physics/arcade/Body.js (Line 97)
- Source code: physics/arcade/Body.js (Line 189)
- Source code: physics/arcade/Body.js (Line 1385)
- Source code: physics/arcade/Body.js (Line 1404)
acceleration : Phaser.Point
The acceleration is the rate of change of the velocity. Measured in pixels per second squared.
allowGravity : boolean
Allow this Body to be influenced by gravity? Either world or local.
allowRotation : boolean
Allow this Body to be rotated? (via angularVelocity, etc)
[readonly] angle : number
The angle of the Body's velocity in radians.
angularAcceleration : number
The angular acceleration is the rate of change of the angular velocity. Measured in degrees per second squared.
angularDrag : number
The drag applied during the rotation of the Body. Measured in degrees per second squared.
angularVelocity : number
The angular velocity controls the rotation speed of the Body. It is measured in degrees per second.
blocked : Object
This object is populated with boolean values when the Body collides with the World bounds or a Tile.
For example if blocked.up is true then the Body cannot move up. An object containing on which faces this Body is blocked from moving, if any.
[readonly] bottom : number
The bottom value of this Body (same as Body.y + Body.height)
bounce : Phaser.Point
The elasticity of the Body when colliding. bounce.x/y = 1 means full rebound, bounce.x/y = 0.5 means 50% rebound velocity.
[readonly] center : Phaser.Point
The center coordinate of the Physics Body.
checkCollision : Object
Set the checkCollision properties to control which directions collision is processed for this Body.
For example checkCollision.up = false means it won't collide when the collision happened while moving up.
If you need to disable a Body entirely, use body.enable = false
, this will also disable motion.
If you need to disable just collision and/or overlap checks, but retain motion, set checkCollision.none = true
. An object containing allowed collision.
collideWorldBounds : boolean
A Body can be set to collide against the World bounds automatically and rebound back into the World if this is set to true. Otherwise it will leave the World. Should the Body collide with the World bounds?
customSeparateX : boolean
This flag allows you to disable the custom x separation that takes place by Physics.Arcade.separate.
Used in combination with your own collision processHandler you can create whatever type of collision response you need. Use a custom separation system or the built-in one?
customSeparateY : boolean
This flag allows you to disable the custom y separation that takes place by Physics.Arcade.separate.
Used in combination with your own collision processHandler you can create whatever type of collision response you need. Use a custom separation system or the built-in one?
deltaMax : Phaser.Point
The Sprite position is updated based on the delta x/y values. You can set a cap on those (both +-) using deltaMax.
dirty : boolean
If this Body in a preUpdate (true) or postUpdate (false) state?
drag : Phaser.Point
The drag applied to the motion of the Body.
embedded : boolean
If a body is overlapping with another body, but neither of them are moving (maybe they spawned on-top of each other?) this is set to true. Body embed value.
enable : boolean
A disabled body won't be checked for any form of collision or overlap or have its pre/post updates run.
facing : number
A const reference to the direction the Body is traveling or facing.
friction : Phaser.Point
The amount of movement that will occur if another object 'rides' this one.
game : Phaser.Game
Local reference to game.
gravity : Phaser.Point
A local gravity applied to this Body. If non-zero this over rides any world gravity, unless Body.allowGravity is set to false.
[readonly] halfHeight : number
The calculated height / 2 of the physics body.
[readonly] halfWidth : number
The calculated width / 2 of the physics body.
[readonly] height : number
The calculated height of the physics body.
immovable : boolean
An immovable Body will not receive any impacts from other bodies.
[readonly] isCircle : boolean
If true
this Body is using circular collision detection. If false
it is using rectangular.
Use Body.setCircle
to control the collision shape this Body uses.
isMoving : boolean
Set by the moveTo
and moveFrom
methods.
left : number
The x position of the Body. The same as Body.x
.
mass : number
The mass of the Body. When two bodies collide their mass is used in the calculation to determine the exchange of velocity.
maxAngular : number
The maximum angular velocity in degrees per second that the Body can reach.
maxVelocity : Phaser.Point
The maximum velocity in pixels per second sq. that the Body can reach.
movementCallback : Function
Optional callback. If set, invoked during the running of moveTo
or moveFrom
events.
movementCallbackContext : Object
Context in which to call the movementCallback.
moves : boolean
If you have a Body that is being moved around the world via a tween or a Group motion, but its local x/y position never
actually changes, then you should set Body.moves = false. Otherwise it will most likely fly off the screen.
If you want the physics system to move the body around, then set moves to true. Set to true to allow the Physics system to move this Body, otherwise false to move it manually.
[readonly] newVelocity : Phaser.Point
The new velocity. Calculated during the Body.preUpdate and applied to its position.
offset : Phaser.Point
The offset of the Physics Body from the Sprite x/y position.
onCollide : Phaser.Signal
A Signal that is dispatched when this Body collides with another Body.
You still need to call game.physics.arcade.collide
in your update
method in order
for this signal to be dispatched.
Usually you'd pass a callback to the collide
method, but this signal provides for
a different level of notification.
Due to the potentially high volume of signals this could create it is disabled by default.
To use this feature set this property to a Phaser.Signal: sprite.body.onCollide = new Phaser.Signal()
and it will be called when a collision happens, passing two arguments: the sprites which collided.
The first sprite in the argument is always the owner of this Body.
If two Bodies with this Signal set collide, both will dispatch the Signal.
onMoveComplete : Phaser.Signal
Listen for the completion of moveTo
or moveFrom
events.
onOverlap : Phaser.Signal
A Signal that is dispatched when this Body overlaps with another Body.
You still need to call game.physics.arcade.overlap
in your update
method in order
for this signal to be dispatched.
Usually you'd pass a callback to the overlap
method, but this signal provides for
a different level of notification.
Due to the potentially high volume of signals this could create it is disabled by default.
To use this feature set this property to a Phaser.Signal: sprite.body.onOverlap = new Phaser.Signal()
and it will be called when a collision happens, passing two arguments: the sprites which collided.
The first sprite in the argument is always the owner of this Body.
If two Bodies with this Signal set collide, both will dispatch the Signal.
onWorldBounds : Phaser.Signal
A Signal that is dispatched when this Body collides with the world bounds.
Due to the potentially high volume of signals this could create it is disabled by default.
To use this feature set this property to a Phaser.Signal: sprite.body.onWorldBounds = new Phaser.Signal()
and it will be called when a collision happens, passing five arguments:onWorldBounds(sprite, up, down, left, right)
where the Sprite is a reference to the Sprite that owns this Body, and the other arguments are booleans
indicating on which side of the world the Body collided.
overlapR : number
If Body.isCircle
is true, and this body collides with another circular body, the amount of overlap is stored here. The amount of overlap during the collision.
overlapX : number
When this body collides with another, the amount of overlap is stored here. The amount of horizontal overlap during the collision.
overlapY : number
When this body collides with another, the amount of overlap is stored here. The amount of vertical overlap during the collision.
[readonly] position : Phaser.Point
The position of the physics body.
[readonly] preRotation : number
The previous rotation of the physics body.
[readonly] prev : Phaser.Point
The previous position of the physics body.
[readonly] radius : number
The radius of the circular collision shape this Body is using if Body.setCircle has been enabled.
If you wish to change the radius then call setCircle
again with the new value.
If you wish to stop the Body using a circle then call setCircle
with a radius of zero (or undefined).
[readonly] right : number
The right value of this Body (same as Body.x + Body.width)
rotation : number
The Body's rotation in degrees, as calculated by its angularVelocity and angularAcceleration. Please understand that the collision Body
itself never rotates, it is always axis-aligned. However these values are passed up to the parent Sprite and updates its rotation.
skipQuadTree : boolean
If true and you collide this Sprite against a Group, it will disable the collision check from using a QuadTree.
[readonly] sourceHeight : number
The un-scaled original size.
[readonly] sourceWidth : number
The un-scaled original size.
[readonly] speed : number
The speed of the Body as calculated by its velocity.
sprite : Phaser.Sprite
Reference to the parent Sprite.
stopVelocityOnCollide : boolean
Set by the moveTo
and moveFrom
methods.
syncBounds : boolean
If true the Body will check itself against the Sprite.getBounds() dimensions and adjust its width and height accordingly.
If false it will compare its dimensions against the Sprite scale instead, and adjust its width height if the scale has changed.
Typically you would need to enable syncBounds if your sprite is the child of a responsive display object such as a FlexLayer,
or in any situation where the Sprite scale doesn't change, but its parents scale is effecting the dimensions regardless.
tilePadding : Phaser.Point
If this is an especially small or fast moving object then it can sometimes skip over tilemap collisions if it moves through a tile in a step.
Set this padding value to add extra padding to its bounds. tilePadding.x applied to its width, y to its height. Extra padding to be added to this sprite's dimensions when checking for tile collision.
top : number
The y position of the Body. The same as Body.y
.
touching : Object
This object is populated with boolean values when the Body collides with another.
touching.up = true means the collision happened to the top of this Body for example. An object containing touching results.
type : number
The type of physics system this body belongs to.
velocity : Phaser.Point
The velocity, or rate of change in speed of the Body. Measured in pixels per second.
wasTouching : Object
This object is populated with previous touching values from the bodies previous collision. An object containing previous touching results.
[readonly] width : number
The calculated width of the physics body.
worldBounce : Phaser.Point
The elasticity of the Body when colliding with the World bounds.
By default this property is null
, in which case Body.bounce
is used instead. Set this property
to a Phaser.Point object in order to enable a World bounds specific bounce value.
x : number
The x position.
y : number
The y position.
Public Methods
- Internal:
-
- This member is internal (protected) and may be modified or removed in the future.
- Source code: physics/arcade/Body.js (Line 795)
- Source code: physics/arcade/Body.js (Line 1245)
- Source code: physics/arcade/Body.js (Line 1257)
- Source code: physics/arcade/Body.js (Line 1269)
- Source code: physics/arcade/Body.js (Line 1281)
- Source code: physics/arcade/Body.js (Line 1293)
- Source code: physics/arcade/Body.js (Line 1305)
- Source code: physics/arcade/Body.js (Line 1165)
- Source code: physics/arcade/Body.js (Line 1195)
- Source code: physics/arcade/Body.js (Line 879)
- Source code: physics/arcade/Body.js (Line 953)
- Source code: physics/arcade/Body.js (Line 1221)
- Source code: physics/arcade/Body.js (Line 1209)
- Source code: physics/arcade/Body.js (Line 1233)
- Internal:
-
- This member is internal (protected) and may be modified or removed in the future.
- Source code: physics/arcade/Body.js (Line 709)
- Internal:
-
- This member is internal (protected) and may be modified or removed in the future.
- Source code: physics/arcade/Body.js (Line 552)
- Source code: physics/arcade/Body.js (Line 1424)
- Source code: physics/arcade/Body.js (Line 1470)
- Source code: physics/arcade/Body.js (Line 1130)
- Source code: physics/arcade/Body.js (Line 1084)
- Source code: physics/arcade/Body.js (Line 1040)
- Source code: physics/arcade/Body.js (Line 681)
- Internal:
-
- This member is internal (protected) and may be modified or removed in the future.
- Source code: physics/arcade/Body.js (Line 508)
- Internal:
-
- This member is internal (protected) and may be modified or removed in the future.
- Source code: physics/arcade/Body.js (Line 640)
<internal> checkWorldBounds() → {boolean}
Internal method.
Returns
True if the Body collided with the world bounds, otherwise false.
deltaAbsX() → {number}
Returns the absolute delta x value.
Returns
The absolute delta value.
deltaAbsY() → {number}
Returns the absolute delta y value.
Returns
The absolute delta value.
deltaX() → {number}
Returns the delta x value. The difference between Body.x now and in the previous step.
Returns
The delta value. Positive if the motion was to the right, negative if to the left.
deltaY() → {number}
Returns the delta y value. The difference between Body.y now and in the previous step.
Returns
The delta value. Positive if the motion was downwards, negative if upwards.
deltaZ() → {number}
Returns the delta z value. The difference between Body.rotation now and in the previous step.
Returns
The delta value. Positive if the motion was clockwise, negative if anti-clockwise.
destroy()
Destroys this Body.
First it calls Group.removeFromHash if the Game Object this Body belongs to is part of a Group.
Then it nulls the Game Objects body reference, and nulls this Body.sprite reference.
getBounds(obj) → {object}
Returns the bounds of this physics body.
Only used internally by the World collision methods.
Parameters
Name | Type | Description |
---|---|---|
obj |
object | The object in which to set the bounds values. |
Returns
The object that was given to this method.
hitTest(x, y) → {boolean}
Tests if a world point lies within this Body.
Parameters
Name | Type | Description |
---|---|---|
x |
number | The world x coordinate to test. |
y |
number | The world y coordinate to test. |
Returns
True if the given coordinates are inside this Body, otherwise false.
moveFrom(duration, speed, direction) → {boolean}
Note: This method is experimental, and may be changed or removed in a future release.
This method moves the Body in the given direction, for the duration specified.
It works by setting the velocity on the Body, and an internal timer, and then
monitoring the duration each frame. When the duration is up the movement is
stopped and the Body.onMoveComplete
signal is dispatched.
Movement also stops if the Body collides or overlaps with any other Body.
You can control if the velocity should be reset to zero on collision, by using
the property Body.stopVelocityOnCollide
.
Stop the movement at any time by calling Body.stopMovement
.
You can optionally set a speed in pixels per second. If not specified it
will use the current Body.speed
value. If this is zero, the function will return false.
Please note that due to browser timings you should allow for a variance in
when the duration will actually expire. Depending on system it may be as much as
+- 50ms. Also this method doesn't take into consideration any other forces acting
on the Body, such as Gravity, drag or maxVelocity, all of which may impact the
movement.
Parameters
Name | Type | Argument | Description |
---|---|---|---|
duration |
integer | The duration of the movement, in ms. |
|
speed |
integer | <optional> |
The speed of the movement, in pixels per second. If not provided |
direction |
integer | <optional> |
The angle of movement. If not provided |
Returns
True if the movement successfully started, otherwise false.
moveTo(duration, distance, direction) → {boolean}
Note: This method is experimental, and may be changed or removed in a future release.
This method moves the Body in the given direction, for the duration specified.
It works by setting the velocity on the Body, and an internal distance counter.
The distance is monitored each frame. When the distance equals the distance
specified in this call, the movement is stopped, and the Body.onMoveComplete
signal is dispatched.
Movement also stops if the Body collides or overlaps with any other Body.
You can control if the velocity should be reset to zero on collision, by using
the property Body.stopVelocityOnCollide
.
Stop the movement at any time by calling Body.stopMovement
.
Please note that due to browser timings you should allow for a variance in
when the distance will actually expire.
Note: This method doesn't take into consideration any other forces acting
on the Body, such as Gravity, drag or maxVelocity, all of which may impact the
movement.
Parameters
Name | Type | Argument | Description |
---|---|---|---|
duration |
integer | The duration of the movement, in ms. |
|
distance |
integer | The distance, in pixels, the Body will move. |
|
direction |
integer | <optional> |
The angle of movement. If not provided |
Returns
True if the movement successfully started, otherwise false.
onCeiling() → {boolean}
Returns true if the top of this Body is in contact with either the world bounds or a tile.
Returns
True if in contact with either the world bounds or a tile.
onFloor() → {boolean}
Returns true if the bottom of this Body is in contact with either the world bounds or a tile.
Returns
True if in contact with either the world bounds or a tile.
onWall() → {boolean}
Returns true if either side of this Body is in contact with either the world bounds or a tile.
Returns
True if in contact with either the world bounds or a tile.
<internal> postUpdate()
Internal method.
<internal> preUpdate()
Internal method.
render(context, body, color, filled)
Render Sprite Body.
Parameters
Name | Type | Argument | Default | Description |
---|---|---|---|---|
context |
object | The context to render to. |
||
body |
Phaser.Physics.Arcade.Body | The Body to render the info of. |
||
color |
string | <optional> |
'rgba(0,255,0,0.4)' | color of the debug info to be rendered. (format is css color string). |
filled |
boolean | <optional> |
true | Render the objected as a filled (default, true) or a stroked (false) |
renderBodyInfo(body, x, y, color)
Render Sprite Body Physics Data as text.
Parameters
Name | Type | Argument | Default | Description |
---|---|---|---|---|
body |
Phaser.Physics.Arcade.Body | The Body to render the info of. |
||
x |
number | X position of the debug info to be rendered. |
||
y |
number | Y position of the debug info to be rendered. |
||
color |
string | <optional> |
'rgb(255,255,255)' | color of the debug info to be rendered. (format is css color string). |
reset(x, y)
Resets all Body values (velocity, acceleration, rotation, etc)
Parameters
Name | Type | Description |
---|---|---|
x |
number | The new x position of the Body. |
y |
number | The new y position of the Body. |
setCircle(radius, offsetX, offsetY)
Sets this Body as using a circle, of the given radius, for all collision detection instead of a rectangle.
The radius is given in pixels and is the distance from the center of the circle to the edge.
You can also control the x and y offset, which is the position of the Body relative to the top-left of the Sprite.
To change a Body back to being rectangular again call Body.setSize
.
Note: Circular collision only happens with other Arcade Physics bodies, it does not
work against tile maps, where rectangular collision is the only method supported.
Parameters
Name | Type | Argument | Description |
---|---|---|---|
radius |
number | <optional> |
The radius of the Body in pixels. Pass a value of zero / undefined, to stop the Body using a circle for collision. |
offsetX |
number | <optional> |
The X offset of the Body from the Sprite position. |
offsetY |
number | <optional> |
The Y offset of the Body from the Sprite position. |
setSize(width, height, offsetX, offsetY)
You can modify the size of the physics Body to be any dimension you need.
This allows you to make it smaller, or larger, than the parent Sprite.
You can also control the x and y offset of the Body. This is the position of the
Body relative to the top-left of the Sprite texture.
For example: If you have a Sprite with a texture that is 80x100 in size,
and you want the physics body to be 32x32 pixels in the middle of the texture, you would do:
setSize(32, 32, 24, 34)
Where the first two parameters is the new Body size (32x32 pixels).
24 is the horizontal offset of the Body from the top-left of the Sprites texture, and 34
is the vertical offset.
Calling setSize
on a Body that has already had setCircle
will reset all of the Circle
properties, making this Body rectangular again.
Parameters
Name | Type | Argument | Description |
---|---|---|---|
width |
number | The width of the Body. |
|
height |
number | The height of the Body. |
|
offsetX |
number | <optional> |
The X offset of the Body from the top-left of the Sprites texture. |
offsetY |
number | <optional> |
The Y offset of the Body from the top-left of the Sprites texture. |
stopMovement(stopVelocity)
If this Body is moving as a result of a call to moveTo
or moveFrom
(i.e. it
has Body.isMoving true), then calling this method will stop the movement before
either the duration or distance counters expire.
The onMoveComplete
signal is dispatched.
Parameters
Name | Type | Argument | Description |
---|---|---|---|
stopVelocity |
boolean | <optional> |
Should the Body.velocity be set to zero? |
<internal> updateBounds()
Internal method.
<internal> updateMovement()
Internal method.
© 2016 Richard Davey, Photon Storm Ltd.
Licensed under the MIT License.
http://phaser.io/docs/2.6.2/Phaser.Physics.Arcade.Body.html