cocos2d-x  3.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Groups Pages
PhysicsBody Class Reference

A body affect by physics. More...

#include <CCPhysicsBody.h>

Inheritance diagram for PhysicsBody:
Ref

Public Member Functions

virtual PhysicsShapeaddShape (PhysicsShape *shape, bool addMassAndMoment=true)
 
void removeShape (PhysicsShape *shape, bool reduceMassAndMoment=true)
 
void removeShape (int tag, bool reduceMassAndMoment=true)
 
void removeAllShapes (bool reduceMassAndMoment=true)
 
const Vector< PhysicsShape * > & getShapes () const
 
PhysicsShapegetFirstShape () const
 
PhysicsShapegetShape (int tag) const
 
virtual void applyForce (const Vect &force)
 Applies a immediate force to body. More...
 
virtual void applyForce (const Vect &force, const Vec2 &offset)
 Applies a immediate force to body. More...
 
virtual void resetForces ()
 reset all the force applied to body. More...
 
virtual void applyImpulse (const Vect &impulse)
 Applies a continuous force to body. More...
 
virtual void applyImpulse (const Vect &impulse, const Vec2 &offset)
 Applies a continuous force to body. More...
 
virtual void applyTorque (float torque)
 Applies a torque force to body. More...
 
virtual void setVelocity (const Vect &velocity)
 set the velocity of a body More...
 
virtual Vec2 getVelocity ()
 get the velocity of a body More...
 
virtual void setAngularVelocity (float velocity)
 set the angular velocity of a body More...
 
virtual Vec2 getVelocityAtLocalPoint (const Vec2 &point)
 get the angular velocity of a body at a local point More...
 
virtual Vec2 getVelocityAtWorldPoint (const Vec2 &point)
 get the angular velocity of a body at a world point More...
 
virtual float getAngularVelocity ()
 get the angular velocity of a body More...
 
virtual void setVelocityLimit (float limit)
 set the max of velocity More...
 
virtual float getVelocityLimit ()
 get the max of velocity More...
 
virtual void setAngularVelocityLimit (float limit)
 set the max of angular velocity More...
 
virtual float getAngularVelocityLimit ()
 get the max of angular velocity More...
 
void removeFromWorld ()
 remove the body from the world it added to More...
 
PhysicsWorldgetWorld () const
 get the world body added to. More...
 
const std::vector
< PhysicsJoint * > & 
getJoints () const
 get all joints the body have More...
 
NodegetNode () const
 get the sprite the body set to. More...
 
void setCategoryBitmask (int bitmask)
 A mask that defines which categories this physics body belongs to. More...
 
void setContactTestBitmask (int bitmask)
 A mask that defines which categories of bodies cause intersection notifications with this physics body. More...
 
void setCollisionBitmask (int bitmask)
 A mask that defines which categories of physics bodies can collide with this physics body. More...
 
int getCategoryBitmask () const
 Return bitmask of first shape, if there is no shape in body, return default value. More...
 
int getContactTestBitmask () const
 Return bitmask of first shape, if there is no shape in body, return default value. More...
 
int getCollisionBitmask () const
 Return bitmask of first shape, if there is no shape in body, return default value. More...
 
void setGroup (int group)
 set the group of body Collision groups let you specify an integral group index. More...
 
int getGroup () const
 Return group of first shape, if there is no shape in body, return default value. More...
 
Vec2 getPosition () const
 get the body position. More...
 
float getRotation () const
 get the body rotation. More...
 
void setPositionOffset (const Vec2 &position)
 set body position offset, it's the position witch relative to node More...
 
Vec2 getPositionOffset () const
 get body position offset. More...
 
void setRotationOffset (float rotation)
 set body rotation offset, it's the rotation witch relative to node More...
 
float getRotationOffset () const
 set the body rotation offset More...
 
bool isDynamic () const
 test the body is dynamic or not. More...
 
void setDynamic (bool dynamic)
 set dynamic to body. More...
 
void setMass (float mass)
 set the body mass. More...
 
float getMass () const
 get the body mass. More...
 
void addMass (float mass)
 add mass to body. More...
 
void setMoment (float moment)
 set the body moment of inertia. More...
 
float getMoment () const
 get the body moment of inertia. More...
 
void addMoment (float moment)
 add moment of inertia to body. More...
 
float getLinearDamping () const
 get linear damping. More...
 
void setLinearDamping (float damping)
 set linear damping. More...
 
float getAngularDamping () const
 get angular damping. More...
 
void setAngularDamping (float damping)
 set angular damping. More...
 
bool isResting () const
 whether the body is at rest More...
 
void setResting (bool rest) const
 set body to rest More...
 
bool isEnabled () const
 whether the body is enabled if the body it isn't enabled, it will not has simulation by world More...
 
void setEnable (bool enable)
 set the enable value. More...
 
bool isRotationEnabled () const
 whether the body can rotation More...
 
void setRotationEnable (bool enable)
 set the body is allow rotation or not More...
 
bool isGravityEnabled () const
 whether this physics body is affected by the physics world’s gravitational force. More...
 
void setGravityEnable (bool enable)
 set the body is affected by the physics world's gravitational force or not. More...
 
int getTag () const
 get the body's tag More...
 
void setTag (int tag)
 set the body's tag More...
 
Vec2 world2Local (const Vec2 &point)
 convert the world point to local More...
 
Vec2 local2World (const Vec2 &point)
 convert the local point to world More...
 
- Public Member Functions inherited from Ref
void retain ()
 Retains the ownership. More...
 
void release ()
 Releases the ownership immediately. More...
 
Refautorelease ()
 Releases the ownership sometime soon automatically. More...
 
unsigned int getReferenceCount () const
 Returns the Ref's current reference count. More...
 
virtual ~Ref ()
 NA NA More...
 

Static Public Member Functions

static PhysicsBodycreate ()
 create a body with defult mass and moment. More...
 
static PhysicsBodycreate (float mass)
 create a body with mass and defult moment. More...
 
static PhysicsBodycreate (float mass, float moment)
 create a body with mass and moment. More...
 
static PhysicsBodycreateCircle (float radius, const PhysicsMaterial &material=PHYSICSBODY_MATERIAL_DEFAULT, const Vec2 &offset=Vec2::ZERO)
 Create a body contains a circle shape. More...
 
static PhysicsBodycreateBox (const Size &size, const PhysicsMaterial &material=PHYSICSBODY_MATERIAL_DEFAULT, const Vec2 &offset=Vec2::ZERO)
 Create a body contains a box shape. More...
 
static PhysicsBodycreatePolygon (const Vec2 *points, int count, const PhysicsMaterial &material=PHYSICSBODY_MATERIAL_DEFAULT, const Vec2 &offset=Vec2::ZERO)
 Create a body contains a polygon shape. More...
 
static PhysicsBodycreateEdgeSegment (const Vec2 &a, const Vec2 &b, const PhysicsMaterial &material=PHYSICSBODY_MATERIAL_DEFAULT, float border=1)
 Create a body contains a EdgeSegment shape. More...
 
static PhysicsBodycreateEdgeBox (const Size &size, const PhysicsMaterial &material=PHYSICSBODY_MATERIAL_DEFAULT, float border=1, const Vec2 &offset=Vec2::ZERO)
 Create a body contains a EdgeBox shape. More...
 
static PhysicsBodycreateEdgePolygon (const Vec2 *points, int count, const PhysicsMaterial &material=PHYSICSBODY_MATERIAL_DEFAULT, float border=1)
 Create a body contains a EdgePolygon shape. More...
 
static PhysicsBodycreateEdgeChain (const Vec2 *points, int count, const PhysicsMaterial &material=PHYSICSBODY_MATERIAL_DEFAULT, float border=1)
 Create a body contains a EdgeChain shape. More...
 

Protected Member Functions

bool init ()
 
virtual void setPosition (const Vec2 &position)
 
virtual void setRotation (float rotation)
 
virtual void setScale (float scale)
 
virtual void setScale (float scaleX, float scaleY)
 
virtual void setScaleX (float scaleX)
 
virtual void setScaleY (float scaleY)
 
void update (float delta)
 
void removeJoint (PhysicsJoint *joint)
 
void updateDamping ()
 
void updateMass (float oldMass, float newMass)
 
 PhysicsBody ()
 
virtual ~PhysicsBody ()
 
- Protected Member Functions inherited from Ref
 Ref ()
 Constructor. More...
 

Protected Attributes

Node_node
 
std::vector< PhysicsJoint * > _joints
 
Vector< PhysicsShape * > _shapes
 
PhysicsWorld_world
 
PhysicsBodyInfo_info
 
bool _dynamic
 
bool _enabled
 
bool _rotationEnabled
 
bool _gravityEnabled
 
bool _massDefault
 
bool _momentDefault
 
float _mass
 
float _area
 
float _density
 
float _moment
 
bool _isDamping
 
float _linearDamping
 
float _angularDamping
 
int _tag
 
bool _positionResetTag
 
bool _rotationResetTag
 To avoid reset the body position when body invoke Node::setPosition(). More...
 
Vec2 _positionOffset
 To avoid reset the body rotation when body invoke Node::setRotation(). More...
 
float _rotationOffset
 
- Protected Attributes inherited from Ref
unsigned int _referenceCount
 count of references More...
 

Friends

class PhysicsWorld
 
class PhysicsShape
 
class PhysicsJoint
 
class Node
 
class Layer
 
class ProtectedNode
 

Detailed Description

A body affect by physics.

it can attach one or more shapes. if you create body with createXXX, it will automatically compute mass and moment with density your specified(which is PHYSICSBODY_MATERIAL_DEFAULT by default, and the density value is 0.1f), and it based on the formular: mass = density * area. if you create body with createEdgeXXX, the mass and moment will be PHYSICS_INFINITY by default. and it's a static body. you can change mass and moment with setMass() and setMoment(). and you can change the body to be dynamic or static by use function setDynamic().

Constructor & Destructor Documentation

PhysicsBody ( )
protected
virtual ~PhysicsBody ( )
protectedvirtual

Member Function Documentation

void addMass ( float  mass)

add mass to body.

if _mass(mass of the body) == PHYSICS_INFINITY, it remains. if mass == PHYSICS_INFINITY, _mass will be PHYSICS_INFINITY. if mass == -PHYSICS_INFINITY, _mass will not change. if mass + _mass <= 0, _mass will equal to MASS_DEFAULT(1.0) other wise, mass = mass + _mass;

void addMoment ( float  moment)

add moment of inertia to body.

if _moment(moment of the body) == PHYSICS_INFINITY, it remains. if moment == PHYSICS_INFINITY, _moment will be PHYSICS_INFINITY. if moment == -PHYSICS_INFINITY, _moment will not change. if moment + _moment <= 0, _moment will equal to MASS_DEFAULT(1.0) other wise, moment = moment + _moment;

virtual PhysicsShape* addShape ( PhysicsShape shape,
bool  addMassAndMoment = true 
)
virtual
virtual void applyForce ( const Vect force)
virtual

Applies a immediate force to body.

virtual void applyForce ( const Vect force,
const Vec2 offset 
)
virtual

Applies a immediate force to body.

virtual void applyImpulse ( const Vect impulse)
virtual

Applies a continuous force to body.

virtual void applyImpulse ( const Vect impulse,
const Vec2 offset 
)
virtual

Applies a continuous force to body.

virtual void applyTorque ( float  torque)
virtual

Applies a torque force to body.

static PhysicsBody* create ( )
static

create a body with defult mass and moment.

static PhysicsBody* create ( float  mass)
static

create a body with mass and defult moment.

static PhysicsBody* create ( float  mass,
float  moment 
)
static

create a body with mass and moment.

static PhysicsBody* createBox ( const Size size,
const PhysicsMaterial material = PHYSICSBODY_MATERIAL_DEFAULT,
const Vec2 offset = Vec2::ZERO 
)
static

Create a body contains a box shape.

static PhysicsBody* createCircle ( float  radius,
const PhysicsMaterial material = PHYSICSBODY_MATERIAL_DEFAULT,
const Vec2 offset = Vec2::ZERO 
)
static

Create a body contains a circle shape.

static PhysicsBody* createEdgeBox ( const Size size,
const PhysicsMaterial material = PHYSICSBODY_MATERIAL_DEFAULT,
float  border = 1,
const Vec2 offset = Vec2::ZERO 
)
static

Create a body contains a EdgeBox shape.

static PhysicsBody* createEdgeChain ( const Vec2 points,
int  count,
const PhysicsMaterial material = PHYSICSBODY_MATERIAL_DEFAULT,
float  border = 1 
)
static

Create a body contains a EdgeChain shape.

static PhysicsBody* createEdgePolygon ( const Vec2 points,
int  count,
const PhysicsMaterial material = PHYSICSBODY_MATERIAL_DEFAULT,
float  border = 1 
)
static

Create a body contains a EdgePolygon shape.

static PhysicsBody* createEdgeSegment ( const Vec2 a,
const Vec2 b,
const PhysicsMaterial material = PHYSICSBODY_MATERIAL_DEFAULT,
float  border = 1 
)
static

Create a body contains a EdgeSegment shape.

static PhysicsBody* createPolygon ( const Vec2 points,
int  count,
const PhysicsMaterial material = PHYSICSBODY_MATERIAL_DEFAULT,
const Vec2 offset = Vec2::ZERO 
)
static

Create a body contains a polygon shape.

points is an array of Vec2 structs defining a convex hull with a clockwise winding.

float getAngularDamping ( ) const
inline

get angular damping.

virtual float getAngularVelocity ( )
virtual

get the angular velocity of a body

virtual float getAngularVelocityLimit ( )
virtual

get the max of angular velocity

int getCategoryBitmask ( ) const

Return bitmask of first shape, if there is no shape in body, return default value.

(0xFFFFFFFF)

int getCollisionBitmask ( ) const

Return bitmask of first shape, if there is no shape in body, return default value.

(0xFFFFFFFF)

int getContactTestBitmask ( ) const

Return bitmask of first shape, if there is no shape in body, return default value.

(0x00000000)

PhysicsShape* getFirstShape ( ) const
inline
int getGroup ( ) const

Return group of first shape, if there is no shape in body, return default value.

(0)

const std::vector<PhysicsJoint*>& getJoints ( ) const
inline

get all joints the body have

float getLinearDamping ( ) const
inline

get linear damping.

float getMass ( ) const
inline

get the body mass.

float getMoment ( ) const
inline

get the body moment of inertia.

Node* getNode ( ) const
inline

get the sprite the body set to.

Vec2 getPosition ( ) const

get the body position.

Vec2 getPositionOffset ( ) const

get body position offset.

float getRotation ( ) const

get the body rotation.

float getRotationOffset ( ) const

set the body rotation offset

PhysicsShape* getShape ( int  tag) const
const Vector<PhysicsShape*>& getShapes ( ) const
inline
int getTag ( ) const
inline

get the body's tag

virtual Vec2 getVelocity ( )
virtual

get the velocity of a body

virtual Vec2 getVelocityAtLocalPoint ( const Vec2 point)
virtual

get the angular velocity of a body at a local point

virtual Vec2 getVelocityAtWorldPoint ( const Vec2 point)
virtual

get the angular velocity of a body at a world point

virtual float getVelocityLimit ( )
virtual

get the max of velocity

PhysicsWorld* getWorld ( ) const
inline

get the world body added to.

bool init ( )
protected
bool isDynamic ( ) const
inline

test the body is dynamic or not.

a dynamic body will effect with gravity.

bool isEnabled ( ) const
inline

whether the body is enabled if the body it isn't enabled, it will not has simulation by world

bool isGravityEnabled ( ) const
inline

whether this physics body is affected by the physics world’s gravitational force.

bool isResting ( ) const

whether the body is at rest

bool isRotationEnabled ( ) const
inline

whether the body can rotation

Vec2 local2World ( const Vec2 point)

convert the local point to world

void removeAllShapes ( bool  reduceMassAndMoment = true)
void removeFromWorld ( )

remove the body from the world it added to

void removeJoint ( PhysicsJoint joint)
protected
void removeShape ( PhysicsShape shape,
bool  reduceMassAndMoment = true 
)
void removeShape ( int  tag,
bool  reduceMassAndMoment = true 
)
virtual void resetForces ( )
virtual

reset all the force applied to body.

void setAngularDamping ( float  damping)
inline

set angular damping.

it is used to simulate fluid or air friction forces on the body. the value is 0.0f to 1.0f.

virtual void setAngularVelocity ( float  velocity)
virtual

set the angular velocity of a body

virtual void setAngularVelocityLimit ( float  limit)
virtual

set the max of angular velocity

void setCategoryBitmask ( int  bitmask)

A mask that defines which categories this physics body belongs to.

Every physics body in a scene can be assigned to up to 32 different categories, each corresponding to a bit in the bit mask. You define the mask values used in your game. In conjunction with the collisionBitMask and contactTestBitMask properties, you define which physics bodies interact with each other and when your game is notified of these interactions. The default value is 0xFFFFFFFF (all bits set).

void setCollisionBitmask ( int  bitmask)

A mask that defines which categories of physics bodies can collide with this physics body.

When two physics bodies contact each other, a collision may occur. This body’s collision mask is compared to the other body’s category mask by performing a logical AND operation. If the result is a non-zero value, then this body is affected by the collision. Each body independently chooses whether it wants to be affected by the other body. For example, you might use this to avoid collision calculations that would make negligible changes to a body’s velocity. The default value is 0xFFFFFFFF (all bits set).

void setContactTestBitmask ( int  bitmask)

A mask that defines which categories of bodies cause intersection notifications with this physics body.

When two bodies share the same space, each body’s category mask is tested against the other body’s contact mask by performing a logical AND operation. If either comparison results in a non-zero value, an PhysicsContact object is created and passed to the physics world’s delegate. For best performance, only set bits in the contacts mask for interactions you are interested in. The default value is 0x00000000 (all bits cleared).

void setDynamic ( bool  dynamic)

set dynamic to body.

a dynamic body will effect with gravity.

void setEnable ( bool  enable)

set the enable value.

if the body it isn't enabled, it will not has simulation by world

void setGravityEnable ( bool  enable)

set the body is affected by the physics world's gravitational force or not.

void setGroup ( int  group)

set the group of body Collision groups let you specify an integral group index.

You can have all fixtures with the same group index always collide (positive index) or never collide (negative index) it have high priority than bit masks

void setLinearDamping ( float  damping)
inline

set linear damping.

it is used to simulate fluid or air friction forces on the body. the value is 0.0f to 1.0f.

void setMass ( float  mass)

set the body mass.

Note
if you need add/subtract mass to body, don't use setMass(getMass() +/- mass), because the mass of body may be equal to PHYSICS_INFINITY, it will cause some unexpected result, please use addMass() instead.
void setMoment ( float  moment)

set the body moment of inertia.

Note
if you need add/subtract moment to body, don't use setMoment(getMoment() +/- moment), because the moment of body may be equal to PHYSICS_INFINITY, it will cause some unexpected result, please use addMoment() instead.
virtual void setPosition ( const Vec2 position)
protectedvirtual
void setPositionOffset ( const Vec2 position)

set body position offset, it's the position witch relative to node

void setResting ( bool  rest) const

set body to rest

virtual void setRotation ( float  rotation)
protectedvirtual
void setRotationEnable ( bool  enable)

set the body is allow rotation or not

void setRotationOffset ( float  rotation)

set body rotation offset, it's the rotation witch relative to node

virtual void setScale ( float  scale)
protectedvirtual
virtual void setScale ( float  scaleX,
float  scaleY 
)
protectedvirtual
virtual void setScaleX ( float  scaleX)
protectedvirtual
virtual void setScaleY ( float  scaleY)
protectedvirtual
void setTag ( int  tag)
inline

set the body's tag

virtual void setVelocity ( const Vect velocity)
virtual

set the velocity of a body

virtual void setVelocityLimit ( float  limit)
virtual

set the max of velocity

void update ( float  delta)
protected
void updateDamping ( )
inlineprotected
void updateMass ( float  oldMass,
float  newMass 
)
protected
Vec2 world2Local ( const Vec2 point)

convert the world point to local

Friends And Related Function Documentation

friend class Layer
friend
friend class Node
friend
friend class PhysicsJoint
friend
friend class PhysicsShape
friend
friend class PhysicsWorld
friend
friend class ProtectedNode
friend

Member Data Documentation

float _angularDamping
protected
float _area
protected
float _density
protected
bool _dynamic
protected
bool _enabled
protected
bool _gravityEnabled
protected
PhysicsBodyInfo* _info
protected
bool _isDamping
protected
std::vector<PhysicsJoint*> _joints
protected
float _linearDamping
protected
float _mass
protected
bool _massDefault
protected
float _moment
protected
bool _momentDefault
protected
Node* _node
protected
Vec2 _positionOffset
protected

To avoid reset the body rotation when body invoke Node::setRotation().

bool _positionResetTag
protected
bool _rotationEnabled
protected
float _rotationOffset
protected
bool _rotationResetTag
protected

To avoid reset the body position when body invoke Node::setPosition().

Vector<PhysicsShape*> _shapes
protected
int _tag
protected
PhysicsWorld* _world
protected

The documentation for this class was generated from the following file: