Difference between revisions of "B2.World"

From GiderosMobile
Line 3: Line 3:
 
'''Available since:''' Gideros 2011.6<br/>
 
'''Available since:''' Gideros 2011.6<br/>
 
=== Description ===
 
=== Description ===
<translate>The [[b2.World` class inherits from the following class: `EventDispatcher]].<br />
+
<translate>The [[b2.World]] class inherits from the following class: [[EventDispatcher]].<br />
 
<br />
 
<br />
The [[b2.World` class manages all physics entities and dynamic simulation. It is possible to create and manage more than one `b2.World]] instance.<br />
+
The [[b2.World]] class manages all physics entities and dynamic simulation. It is possible to create and manage more than one [[b2.World]] instance.<br />
 
<br /></translate>
 
<br /></translate>
 
=== Examples ===
 
=== Examples ===

Revision as of 14:01, 23 August 2018

Supported platforms: android, ios, mac, pc
Available since: Gideros 2011.6

Description

The b2.World class inherits from the following class: EventDispatcher.

The b2.World class manages all physics entities and dynamic simulation. It is possible to create and manage more than one b2.World instance.

Examples

Creating Box2d body and moving Bitmap along the body

require "box2d"
local world = b2.World.new(0, 10, true)

--create ball bitmap object from ball graphic
local ball = Bitmap.new(Texture.new("ball.png"))
--reference center of the ball for positioning
ball:setAnchorPoint(0.5,0.5)
 
ball:setPosition(100,100)
 
--get radius
local radius = ball:getWidth()/2
 
--create box2d physical object
local body = world:createBody{type = b2.DYNAMIC_BODY}
local circle = b2.CircleShape.new(0, 0, radius)
local fixture = body:createFixture{shape = circle, density = 1.0, 
friction = 0.1, restitution = 0.2}
ball.body = body
 
--add to scene
stage:addChild(ball)

stage:addEventListener(Event.ENTER_FRAME, function()
	-- edit the step values if required. These are good defaults!
    world:step(1/60, 8, 3)
	ball:setPosition(ball.body:getPosition())
	ball:setRotation(math.rad(ball.body:getAngle()))
end)

Detecting collisions between bodies

--add collision event listener
world:addEventListener(Event.BEGIN_CONTACT, function(e)
    --getting contact bodies
    local fixtureA = e.fixtureA
    local fixtureB = e.fixtureB
    local bodyA = fixtureA:getBody()
    local bodyB = fixtureB:getBody()
     
    --do what you need with colliding bodies
end)

--add collision event listener
world:addEventListener(Event.END_CONTACT, function(e)
    --getting contact bodies
    local fixtureA = e.fixtureA
    local fixtureB = e.fixtureB
    local bodyA = fixtureA:getBody()
    local bodyB = fixtureB:getBody()
     
    --do what you need with colliding bodies
end)

--add collision event listener
world:addEventListener(Event.PRE_SOLVE, function(e)
    --getting contact bodies
    local fixtureA = e.fixtureA
    local fixtureB = e.fixtureB
    local bodyA = fixtureA:getBody()
    local bodyB = fixtureB:getBody()
     
    --do what you need with colliding bodies
end)

--add collision event listener
world:addEventListener(Event.POST_SOLVE, function(e)
    --getting contact bodies
    local fixtureA = e.fixtureA
    local fixtureB = e.fixtureB
    local bodyA = fixtureA:getBody()
    local bodyB = fixtureB:getBody()
     
    --do what you need with colliding bodies
	
	--additionally get collision force
	print(event.maxImpulse)
end)

Methods

b2.World.new -
b2.World:clearForces - call this after you are done with time steps to clear the forces
b2.World:createBody - creates a rigid body given a definition
b2.World:createJoint - creates a joint given a definition
b2.World:createParticleSystem - create particle system
b2.World:destroyBody - destroys a rigid body
b2.World:destroyJoint - destroys a joint
b2.World:getGravity - returns the gravity vector
b2.World:queryAABB - query the world for all fixtures that potentially overlap the provided AABB
b2.World:rayCast - raycast the world for all fixtures in the path of the ray
b2.World:setDebugDraw - registers a b2.DebugDraw instance for debug drawing
b2.World:setGravity - sets the gravity vector
b2.World:step - takes a time step

Events

Event.BEGIN_CONTACT
Event.BEGIN_CONTACT_PARTICLE
Event.END_CONTACT
Event.POST_SOLVE
Event.PRE_SOLVE

Constants