Box2D

Box2D

Box2D是一個用於模擬2D剛體物體的C++引擎。zlib許可是一個自由軟體授權協定,但並非copyleft。

Box2D不是一種計算機程式語言,不需要又從變數、數據類型啊一大堆讓人頭痛的基礎知識學起;也不是一種遊戲編程軟體,不需要複雜的安裝與配置。它是一個強大的開源物理遊戲引擎,用來模擬2D剛體物體運動和碰撞,由Erin Catto早在2007年用C++語言開發。

Box2D集成了大量的物理力學和運動學的計算,並將物理模擬過程封裝到類對象中,將對物體的操作,以簡單友好的接口提供給開發者。我們只需要調用引擎中相應的對象或函式,就可以模擬現實生活中的加速、減速、拋物線運動、萬有引力、碰撞反彈等等各種真實的物理運動。

基本介紹

引擎簡介,安裝,名稱解釋,基本用法,高級話題,相關書籍,

引擎簡介

[3]對於iPhone、iPad和Android遊戲,可以使用Cocos2d遊戲引擎和Corona Framework。

安裝

由於box2d套用了cmake,所以要先下載安裝cmake
box2d的最新版
可在下面網址下載。
vs可選擇vs2010專業版
打開cmake,在where is source code 選擇box2d解壓後的資料夾,不是裡面的box2d資料夾,
在where to build the binaries 選擇/Box2D_v(版本)/Build
點configure選擇vs版本,然後運行,沒有出錯就行(指的是沒有最後沒生成box2d.sln,可以看按鈕下面有 沒有紅色的提示),然後再按 generate,那么在build裡面就可生成box2d.sln,
沒有的話就是出錯,照上面看看where is source code選擇的資料夾有沒有錯。
打開box2d.sln,選擇testbed或者helloworld為你的啟動項目,在選擇release,可生成testbed。
如果還遇到錯誤,那就登入作者的論壇去看看別人發的貼子有沒有你的錯誤,網頁可翻譯後在看
這個只是用來box2d的測試,了解一些box2d的工作原理,並不是box2d庫的的一部分
box2d是由freeglut和glui製作的。

名稱解釋

  • 世界world
世界本是混沌的一體,盤古的神斧砍下去之後才有了天和地,形成了真正的世界,之後才有了山川、河流、花草、樹木。Box2D也一樣,現在Box2D在我們的腦中也是混沌的一片,在創建物體或進行物理模擬之前,首先我們也是要先創建世界。
Box2D中用b2World類來表示世界。它是Box2D的一個核心類之一,集成了Box2D對所有對象的創建、刪除、碰撞模擬的相關接口。
  • 剛體Body
生活中我們看到的任何物體都可以用東西來描述,會飛的東西是鳥,踩油門能跑的東西是汽車,能載船的東西是水,有半徑的東西是圓,有寬和高的東西是矩形。“東西”這個詞在Box2D的字典中叫做“剛體”,英文名字叫b2Body。
b2Body是Box2D的核心類,是學習Box2D的基礎,也是重中之重。b2Body用來模擬現實物理世界中的所有物體。Box2D中的任何碰撞、反彈、運動軌跡等各種物理現象模擬和數據計算都是基於剛體實現的,所以剛體b2Body所包含的信息有很多,如物體的坐標、角度、受力大小、速度、質量等大量的信息。
  • 定點Fixture
英文“Fixture”是“固定設施”的意思(一些網路教程中也譯為“夾具”,"定製器"),在Box2D中b2FixtureDef用來定義剛體所固有的一些屬性,並保存在b2Fixture對象中。現實中通常是物體材料特性相關的一些屬性,如剛體的密度、摩擦係數等屬性都是由b2FixtureDef保存的。
  • 形狀
形狀是一個b2Shape類型的對象,實現了剛體的具體形狀,Box2D將基於這個形狀進行精確的物理碰撞模擬。實際上,b2Shape只是一個抽象的父類,沒有實際創建形狀的過程。在實際開發過程中,b2FixtureDef.shape的屬性值都是b2CircleShape、b2PolygonShape等b2Shape的子類對象。

基本用法

-Testbed 設定(linux, windows, mac)
-Testbed 結構
-為testbed創建一個‘test’
-剛體體(Bodies)
-定製器(Fixtures)
-World設定
-自定義重力(Custom gravity)
-力與衝量(Forces and impulses)
-勻速運動(Moving at constant speed)
-讓物體按指定角度旋轉(Keeping a body rotated at given angle)
-跳躍(Jumping)
-使用debug draw
-畫自己的物體(Drawing your own objects)
-User data
-碰撞剖析(Anatomy of a collision)
-碰撞回調(Collision callbacks)
-碰撞過濾(Collision filtering)
-感測器(Sensors)
-射線投射(Raycasting)
-查詢World(World querying)
-移除物體(Removing bodies)
-“觸地”問題(The ‘touching the ground’question)
-連線器(Joints)
-一些陷阱(Some gotchas)

高級話題

-車輛懸浮(Vehicle suspension)
-黏性彈力(Sticky projectiles)
-飛行軌跡(Projected trajectory)
-爆炸(Explosions)
-易碎物體(Breakable bodies)
-自上而下汽車物理(Top-down car physics)
-地形(Terrain)
-單面牆和平台(One-way walls and platforms)
-傳送帶(Conveyor belts)
-自動扶梯?(Escalators?)
-電梯(Elevators)
-飛箭(Arrow in flight)
-高級運動特性(Advanced character movement)

相關書籍

《Box2D物理遊戲編程初學者指南》
  • 書籍介紹
  • 書籍目錄
Box2D 物理遊戲編程基礎    1致謝    5前言    6    A.1 是否需要物理知識    A.2 適用對象    A.3 需要什麼    A.4 閱讀規範1.認識Box2D世界    8    1.1什麼是Box2D引擎    1.2 創建Box2D世界    1.3 開啟Box2D模擬    1.4 小結2.認識剛體    18    2.1 什麼是剛體    2.2創建剛體    2.3 認識剛體形狀    2.4 b2DebugDraw調試視圖    2.5小結3.剛體屬性詳解    35    3.1 b2BodyDef    3.2 b2FixtureDef    3.3 小結4.剛體操作    71    4.1 LDEasyBox2D工具包    4.2 CreateFixture    4.3 CreateFixture2    4.4 DestroyFixture    4.5 ApplyForce    4.6 ApplyImpulse    4.7 ApplyTorque    4.8 GetLocalXXX、GetWorldXXX    4.9 GetMass    4.10 SetMassData    4.11 Split    4.12 GetAABB    4.13 QueryAABB    4.14 QueryShape    4.15 RayCast    4.16 小結5.碰撞處理    130    5.1 認識碰撞    5.2 b2Contact    5.3 b2ContactListener碰撞偵聽器    5.4 遊戲中的碰撞處理    5.5 小結6.關節    177    6.1 認識Box2D關節    6.2 b2MouseJoint滑鼠關節    6.3 b2PrismaticJoint位移關節    6.4 b2LineJoint線段關節    6.5 b2RevoluteJoint旋轉關節    6.6 b2DistanceJoint距離關節    6.7 b2WeldJoint貼上關節    6.8 b2PulleyJoint滑輪關節    6.9 b2FrictionJoint 摩擦關節    6.10 b2GearJoint 齒輪關節    6.11 b2WheelJoint中軸關節    6.12 b2RopeJoint繩索關節    6.13 b2MotorJoint馬達關節    6.14 綜合示例    6.15 小結7.Box2D工具    237    7.1 PhysicsEditor    7.2 RUBE    7.3 b2Separator    7.4 小結8. 遊戲中的Box2D套用    266    8.1 柔體    8.2 浮力    8.3 剛體切割    8.4 關節碰撞    8.5 小結附錄:向量運算    316    A.1 Box2D中的向量    A.2 AddVV    A.3 SubtractVV    A.4 Normalize    A.5 NegativeSelf    A.6 Distance    A.7 Mul    A.8 Cross    A.9 Dot

相關詞條

熱門詞條

聯絡我們