Box2D

***Box2D*** ir atvērtā koda C++ dzinējs, kas imitē cietos ķermeņus 2D. *Box2D* izstrādā Erin Catto[1], un tam ir zlib licence. To izmanto *Crayon Physics Deluxe, Limbo, Rolando, Incredibots, Angry Birds, Tiny Wings, Shovel Knight, Transformice, Happy Wheels* un daudzās tiešsaistes flash spēlēs, kā arī *iPhone, iPad* un *Android* spēlēm izmantojot *Cocos2d* vai *Moscrif* spēļu dzinēju un *Corona* sistēmu.

**Zīmēšanu Box2D neveic**. Dažās implementācijās tiek zīmētas pavisam vienkāršas figūras atkļūdošanai, bet vispār box2D tikai sniedz objektu pozīcijas un rotāciju, un zīmēšana jāveic pašiem.

## Vēsture
Box2D[2] pirmo reizi tika izlaists kā "Box2D Lite", demonstrācijas dzinējs, ko papildināja fizikas prezentācija, kuru sniedza Erin Catto GDC 2006. gada 11. septembrī. 2010. gada 17. janvārī Box 2D pārvietoja projektu uz Google kodu, lai to uzturētu. 2015. gada 12. jūlijā atkal tika pārcelts hostings, šoreiz uz GitHub.

2008. gada 6. martā tika uzsākta versija 2.0, kas ieviesa nepārtrauktu papildināšanu un API atjaunošanu.

## Box2D galvenās sastāvdaļas

* **World**: Veic simulāciju. Zin visu par koordinātu telpu un satur sarakstu ar visiem pasaules objektiem
* **Body**: Galvenā simulējamo ķermeņu klase. Body objektiem ir pozīcija, rotācija un ātrums.
* **Shape**: Satur ģeometrijas aprakstu ķermeņiem, kas tiek izmantota sadursmēm (collisions).
* **Fixture**: Piestiprina ķermenim ģeometriju (shape) un satur īpašības, kā blīvums, berze un elastība/atgrūšana.
* **Joint**: Savienojums starp diviem ķermeņiem vai ķermeni un pasauli, piemēram atspere vai eņģe.

## Ķermeņu tipi

Box2D veic ierobežotu stingru ķermeņa simulāciju. Tā var simulēt ķermeņus, kas sastāv no izliektiem poligoniem, apļiem un malu formām. Ķermenis ir savienots kopā ar locītavām un darbojas ar spēkiem. Dzinējs izmanto arī smagumu, berzi un restitūciju. Šos ķermeņus iedala 3 tipos:

* **b2Body.b2_staticBody**
** Nekustīgs objekts, kas ietekmē citus ķermeņus
* **b2Body.b2_dynamicBody**
** Jebkurš kustinām objekts, kas piedalās fizikas simulācijā
* **b2Body.b2_kinematicBody:**
** Objekti, kam var būt ātrums, bet kas nepiedalās fizikas simulācijā, piemēram, mākoņi fonā.

## Objektu izveidošana
thumb|Objektu veidošanas hierarhija
Lai izveidotu objektu nepieciešams izpildīt 5 soļus:

# Izveidot bodyDef objektu
# Balstoties uz bodyDef izveidot b2Body objektu
# Izveidot b2Shape objektu: b2PolygonShape, b2CircleShape
# Izveidot b2FixtureDef objektu un uzstādīt tam īpašības un b2Shape
# Piesaistīt b2Body objektam b2FixtureDef objektu un līdz ar to shape

## Pieejamība starp citām platformām
Box2D ir rakstīts neatkarīgi no platformas C ++ (izmantojams jebkurā sistēmā ar C ++ kompilatoru). Dzinējs var tikt sastādīts fiksētā un peldošā komata režīmā, un to izmantoja Nintendo DS, Wii un vairākos mobilajos tālruņos (ieskaitot Android, BlackBerry 10 un iOS), kā arī lielākajā daļā galveno operētājsistēmu.

Dzinējs ir pārnests uz daudzām citām programmēšanas valodām un vidēm, ieskaitot Java, Adobe Flash (ActionScript un Haxe valodās), C #, Lua, JavaScript, un D. Saistības pastāv, lai izmantotu apkopoto bibliotēku no Python un DarkBASIC.

2009. gada 30. oktobrī tika paziņots, ka Box2D tika integrēts (tagad vecāks) 2D spēļu dzinējs.

## Programmas, kas izmanto Box2D
* Construct2
* Isogenic Engine
* LÖVE, izmanto fizikas motoru spēlēm.
* ENIGMA Development Environment
* GameMaker: Studio, izmanto motoru fizikas simulācijai.
* Unity
* LibGDX, izmanto fizikas motoru spēlēm un apgaismojumu.
* Clickteam Fusion
* Defold, palaida spēli King 2016 gadā
* Corona SDK
* BlitzBasic
* Stencyl, izmanto fizikas motoru spēlēm un ļauj eksportēt uz Flash un iOS.

## Atsauces