亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

第十二章物理引擎

2019-11-09 18:46:39
字體:
來源:轉載
供稿:網友

Cocos2d-x學習筆記


使用物理引擎

物理引擎能夠模仿真實世界物理運動規律,使得精靈做出自由落體、拋物線運動、互相碰撞、反彈等效果,使用物理引擎還可以進行準確的碰撞檢測。

物理引擎核心概念

物理引擎核心概念

世界(World):游戲中的物理世界。物體(Body):構成物理世界的基礎,具有位置、旋轉角度等的特性,它上面的任何兩點之間的距離都是完全不變的,也可以稱為剛體(rigid body)。形狀(Shape):物體的形狀。一個依附于物體的二維碰撞幾何結構,具有摩擦和彈性等材料屬性。由于物體被抽象成剛體,忽略了形狀。但是物體間的摩擦和碰撞時與形狀有關的,這時候需要將形狀依附于物體上。接觸點(Contact):管理檢測碰撞。關節(Joint):把兩個或多個物體固定到一起的約束。

物理引擎與精靈關系

物理引擎本身不包括精靈,它與精靈關系之間是相互獨立的,精靈不會自動跟著物理引擎中的物體做物理運動,通常需要編寫代碼將物體與精靈連接起來,同步它們的狀態。

Cocos2d-x 3.x中物理引擎封裝

Cocos2d-x 3.x 物理引擎API

在Cocos2d-x 3.x 中物理世界被融入游戲引擎的場景中,我們可以指定這個場景是否使用物理引擎,為此創建類Scene增加如下函數:

static Scene * createWithPhysics():創建場景對象。bool initWithPhysics():初始化具有物理引擎場景對象。void addChlidToPhysicsWorld(Node * child):增加節點對象到物理世界。PhysicsWorld * getPhysicsWorld():獲得物理世界對象。

Cocos2d-x 3.x 在節點類Node中增加了physicsBody屬性,我們可以將物理引擎中的物體添加到Node對象中。 此外,Cocos2d-x 3.x為物理引擎增加了很多類,其中主要的類如下:

PhysicsWorld類:封裝物理引擎世界(World)。PhysicsBody類:封裝物理引擎物體(Body)。PhysiCSShape類:封裝物理疫情形狀(Shape)。PhysicsContact類:封裝物理引擎碰撞類(Contact)。EventListenerPhysicsContact類:碰撞檢測監聽類。PhysicsJoint類:封裝物理引擎關節(Joint)。

PhysicsShape類

形狀類PhysicsShape是一個抽象類,它有很多子類:

PhysicsShapeCircle:圓圈。PhysicsShapeBox:矩形盒子。PhysicsShapePolygon:多邊形。PhysicsShapeEdgeSegment:有邊的線段。PhysicsShapeEdgeBox:有邊的矩形盒子。PhysicsShapeEdgePolygon:有邊的多邊形。PhysicsShapeEdgeChain:有邊的鏈形。

EventListenerPhysicsContact類

碰撞檢測監聽類EventListenerPhysicsShapeContact,子類如下: EventListenerPhysicsContact中碰撞檢測事件響應屬性:

std::function<bool(PhysicsContact & contact)>onContactBegin:兩個物體開始接觸時會響應,但只調用一次。返回false情況下后面的兩個屬性(onContactPReSolve 和 onContactPostSolve)所指定的函數,不調用。std::function<bool(PhysicsContact & contact, PhysicsContactPreSolve & solve)>onContactPreSolve:持續接觸時響應,它會被多次調用。返回false情況下后面的onContactPostSolve屬性所指定的函數,不調用。std::function<void(PhysicsContact & contact, const PhysicsContactPostSolve & solve)>onContactPostSolve:持續接觸時響應,調用完PreSolve后調用。std::function<void(PhysicsContact & contact)>onContactSeparate:分離時響應,但只調用一次。

PhysicsJoint類

關節類PhysicsJoint是一個抽象類,其子類如下: PhysicsJointDistance類是距離關節類,兩個物體上面各自有一點,兩點之間的距離必須固定不變。創建PhysicsJointDistace的靜態函數定義如下:

static PhysicsJointDistance * construct (    PhysicsBody * a,    PhysicsBody * b,    const Vec2 & anchr1,    const Vec2 & anchr2)

其中參數a和b是兩個互相約束的物體,anchr1是連接a物體的錨點,anchr2是b物體的錨點。

實例

小球

HelloWorld.h文件

#ifndef __HELLOWORLD_SCENE_H__#define __HELLOWORLD_SCENE_H__#include "cocos2d.h"USING_NS_CC;class HelloWorld : public cocos2d::Layer{public: static cocos2d::Scene* createScene(); virtual bool init(); virtual bool onTouchBegan(cocos2d::Touch * touch, cocos2d::Event * event); void addNewSpriteAtPosition(Vec2 p); // implement the "static create()" method manually CREATE_FUNC(HelloWorld);};#endif // __HELLOWORLD_SCENE_H__

HelloWorld.cpp文件

#include "HelloWorldScene.h"USING_NS_CC;Scene* HelloWorld::createScene(){ // 'scene' is an autorelease object auto scene = Scene::createWithPhysics();//創建帶物理引擎的場景 scene->getPhysicsWorld()->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL);//設置在物理世界中調試遮罩,當調試結束時,需要把它關閉 // 'layer' is an autorelease object auto layer = HelloWorld::create(); // add layer as a child to scene scene->addChild(layer); // return the scene return scene;}// on "init" you need to initialize your instancebool HelloWorld::init(){ ////////////////////////////// // 1. super init first if ( !Layer::init() ) { return false; } log("HelloWorld init"); Size visibleSize = Director::getInstance()->getVisibleSize(); Vec2 origin = Director::getInstance()->getVisibleOrigin(); //定義世界的邊界 //創建物體對象,靜態函數createEdgeBox指定世界邊界是矩形盒子,第一個參數指定矩形的大小,第二個參數是設置材質,第三個參數是設置邊的寬度 auto body = PhysicsBody::createEdgeBox(visibleSize, PHYSICSBODY_MATERIAL_DEFAULT, 5.0f); auto edgeNode = Node::create();//創建邊界節點對象,這個節點對象作為世界邊界的對象 edgeNode->setPosition(Vec2(visibleSize.width / 2, visibleSize.height / 2)); edgeNode->setPhysicsBody(body);//設置與節點相關的物體對象 this->addChild(edgeNode); setTouchEnabled(true); //設置為單點觸摸 setTouchMode(Touch::DispatchMode::ONE_BY_ONE); return true;}bool HelloWorld::onTouchBegan(Touch * touch, Event * event){ Vec2 location = touch->getLocation(); addNewSpriteAtPosition(location); return false;}void HelloWorld::addNewSpriteAtPosition(Vec2 p){ auto sp = Sprite::create("Ball.png"); sp->setTag(1); auto body = PhysicsBody::createCircle(sp->getContentSize().width / 2);//創建圓圈形狀物體 sp->setPhysicsBody(body); sp->setPosition(p); this->addChild(sp);}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
午夜精品理论片| 久久人人爽人人爽人人片av高清| www亚洲欧美| 久久亚洲一区二区三区四区五区高| 18性欧美xxxⅹ性满足| 成人国产精品色哟哟| 亚洲资源在线看| 亚洲人精选亚洲人成在线| 91亚洲国产成人精品性色| 欧美肥臀大乳一区二区免费视频| 国产中文字幕91| 91精品国产99久久久久久| 国产精品久久久久久久久久久久| 亚洲精品之草原avav久久| 疯狂做受xxxx欧美肥白少妇| 国产精品成人一区| 国产精品午夜国产小视频| 久青草国产97香蕉在线视频| 欧美高清理论片| 91久久精品美女| 日韩av综合网站| 欧美日韩一区二区免费视频| 亚洲成人黄色网| 国产一区二区欧美日韩| 在线观看国产精品淫| 久久成人这里只有精品| 日韩在线免费av| 亚洲视频国产视频| 午夜免费在线观看精品视频| 成人激情视频小说免费下载| 成人春色激情网| 日本精品视频在线| 法国裸体一区二区| 久久亚洲精品成人| 久久99久久亚洲国产| 国产精品18久久久久久麻辣| 亚洲最大福利视频网| 97免费视频在线播放| 国产精品久久久久久久久久久久久| 亚洲人成毛片在线播放| 国产69久久精品成人看| 亚洲男子天堂网| 最近2019中文字幕在线高清| 在线观看欧美www| 精品一区二区三区四区在线| 在线中文字幕日韩| 在线成人激情视频| www.久久草.com| 久久久久国产精品免费网站| 久久伊人精品视频| 亚洲欧洲在线免费| 欧美亚洲第一区| 26uuu国产精品视频| 色琪琪综合男人的天堂aⅴ视频| 欧美极品少妇xxxxⅹ免费视频| 91精品视频免费| 国产精品高潮呻吟久久av野狼| 78色国产精品| 日日噜噜噜夜夜爽亚洲精品| 亚洲人成绝费网站色www| 欧美日韩一区二区在线播放| 欧美自拍大量在线观看| 国产精品毛片a∨一区二区三区|国| 中日韩美女免费视频网址在线观看| 夜夜嗨av一区二区三区四区| 亚洲自拍av在线| 国产精品第3页| 亚洲精品乱码久久久久久金桔影视| 亚洲综合在线做性| 久久久亚洲福利精品午夜| 成人国产精品一区| 自拍偷拍亚洲精品| 亚洲午夜精品久久久久久久久久久久| 久久久精品在线| 日韩激情视频在线播放| 亚洲变态欧美另类捆绑| 亚洲夜晚福利在线观看| 欧美性黄网官网| 日韩视频中文字幕| 日韩欧美在线视频日韩欧美在线视频| 亚洲国内精品视频| 国产精品一区二区av影院萌芽| 久久久人成影片一区二区三区| 中文字幕视频在线免费欧美日韩综合在线看| 韩国精品美女www爽爽爽视频| 中文在线资源观看视频网站免费不卡| 国产香蕉97碰碰久久人人| 日韩欧美亚洲综合| 成人日韩av在线| 2018中文字幕一区二区三区| 欧美日本高清视频| 久久久久久久久久久网站| 尤物tv国产一区| 国产综合福利在线| 欧美在线视频网| 一区二区三区视频免费在线观看| 久青草国产97香蕉在线视频| 亚洲专区国产精品| 国模gogo一区二区大胆私拍| 国产成人精品久久二区二区91| 国产日本欧美一区二区三区| 精品日韩中文字幕| 91精品久久久久久久久久久久久久| 久久亚洲一区二区三区四区五区高| 亚洲999一在线观看www| 久久久999国产| 国内精品国产三级国产在线专| 久久综合网hezyo| 精品一区二区亚洲| 国产精品嫩草影院一区二区| 亚洲国产精品成人一区二区| 色偷偷88888欧美精品久久久| 8050国产精品久久久久久| 97视频在线观看亚洲| 欧美激情喷水视频| 91免费看片在线| 日韩免费黄色av| 黄色成人在线免费| 国产精品人人做人人爽| 中文国产成人精品久久一| 日韩精品在线观| 国产日本欧美在线观看| 精品视频久久久| 欧美日韩ab片| 成人性生交大片免费看小说| 69视频在线播放| www日韩中文字幕在线看| 精品毛片网大全| 97视频色精品| 亚洲国产精品久久久久久| 欧美日韩激情小视频| 欧美成人国产va精品日本一级| 亚洲一区二区久久| 亚洲白拍色综合图区| 成人性生交大片免费看视频直播| 欧美高清一级大片| 欧美人与性动交a欧美精品| 国产精品永久免费在线| 国产精品免费一区豆花| 欧美超级免费视 在线| 日韩有码在线视频| 一区二区三区黄色| 久久免费精品日本久久中文字幕| 最新69国产成人精品视频免费| 91在线高清免费观看| 欧美色另类天堂2015| 欧美日韩国产一区二区| 亚洲欧美国产日韩天堂区| 欧美在线日韩在线| 欧美日韩国产成人在线| 欧美电影在线免费观看网站| 97色伦亚洲国产| 97在线视频免费播放| 亚洲sss综合天堂久久| 7m精品福利视频导航| 中文字幕亚洲一区| 精品日韩视频在线观看| 日韩欧美中文在线| 国产精品电影在线观看| 欧美激情一区二区三级高清视频| 国产日韩欧美电影在线观看| 亚洲午夜未满十八勿入免费观看全集| 影音先锋欧美精品| 亚洲三级av在线|