Physics Engine

Extension Description
Add physics to simulate the real-life simulation.

Introduction

What is Physics Engine?

Physics Engine is a 2D rigid body simulation library for making games and animations. Programmers can use it in their games to make objects move in realistic ways and make the projects more interactive. From the game engine’s point of view, the physics engine is just a system for procedural animation.

Accessing Physics Engine in Block Coding

Following is the process to add Physics Engine capability to the PictoBlox Project.

1. Open PictoBlox and create a new file.
2. Select the coding environment as Block Coding.
3. Next, click on the Add Extension button and add the Physics Engine extension.
4. You can find the Physics Engine blocks available in the project.

Core Concepts

Physics Engine works with several fundamental concepts and objects. We briefly define these objects here and more details are given later in the block definitions and examples.

1. Shape: A shape is a 2D geometrical sprite, such as a circle or polygon or the sprite shape.
2. Rigid body: A chunk of matter that is so strong that the distance between any two bits of matter on the chunk is constant. They are hard like a diamond. In the following discussion, we use body interchangeably with rigid body.
3. Fixture: A fixture binds a shape to a body and adds material properties such as density, friction, and restitution. A fixture puts a shape into the collision system (broad phase) so that it can collide with other shapes.
4. Constraint: A constraint is a physical connection that removes degrees of freedom from bodies. A 2D body has 3 degrees of freedom (two translation coordinates and one rotation coordinate). If we take a body and pin it to the wall (like a pendulum) we have constrained the body to the wall. At this point the body can only rotate about the pin, so the constraint has removed 2 degrees of freedom.
5. Contact constraint: A special constraint designed to prevent penetration of rigid bodies and to simulate friction and restitution. You do not create contact constraints; they are created automatically by Physics Engine.
6. World: A physics world is a collection of bodies, fixtures, and constraints that interact together. Box2D supports the creation of multiple worlds, but this is usually not necessary or desirable.
7. Solver: The physics world has a solver that is used to advance time and resolve contact and joint constraints. The Box2D solver is a high-performance iterative solver that operates in order N time, where N is the number of constraints.
8. Continuous collision: The solver advances bodies in time using discrete time steps.

PictoBlox Blocks

The block sets the boundaries for the stage. Available types: boxed with roof, boxed without roof, open with floor, and open without floor.
The block sets the gravity for the physics engine in the defined x and y directions.
The block set the sprite characteristics for the Physics Engine as free, fixed, or fixed but can rotate.
The block sets the sprite’s density, roughness, and bounce (restitution) to the defined values.
The block sets the selected property of the sprite (density, roughness, and bounce) to the specified value.
The block sets the sprite’s mass to the specified value.
The blocks make the sprite go to the specified x and y locations according to the specified coordinate system – world, stage, or relative.
The block reports the mass of the sprite.
The block reports the density of the sprite.
The block enables the physics engine for the selected objects with the defined precision level.
The block does the step simulation for the Physics Engine. This block is required to run in a loop for the physics to work.
The block sets the velocity of the sprite to the defined values in the x and y directions.
The block changes the velocity of the sprite by the defined values in the x and y directions.
The blocks add a force to the sprite with the defined value in the specified direction.
The block adds a spin force to the sprite with the specified value.
The block reports the x velocity of the sprite.
The block reports the y velocity of the sprite.
The block reports all the objects that are in contact with the sprite.
The block set the stage view to the defined coordinates with respect to the defined world coordinates. This is very helpful in creating games.
The block changes the stage view by the defined coordinate values with respect to the defined world coordinates.
The block reports the x coordinate value of the stage view.
The block reports the y coordinate value of the stage view.
The block sets the velocity unit for the physics engine to the specified unit system.
The block sets the force unit for the physics engine to the specified unit system.
The block sets the mass unit for the physics engine to the specified unit system.
The block reset the unit system of the physics engine to default.
The block reports the current unit system used for the specified property.
The block converts the specified value of the distance from the input unit system to the target unit system.
The block converts the specified value of the mass from the input unit system to the target unit system.
The block converts the specified value of the time from the input unit system to the target unit system.