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

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

第十二章物理引擎

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

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
亚洲午夜小视频| 久久深夜福利免费观看| 性金发美女69hd大尺寸| 国内精品久久久久久中文字幕| 欧美日韩国产在线播放| 欧美成人中文字幕| 国产精品久久不能| 在线亚洲午夜片av大片| 欧美精品一区二区三区国产精品| 亚洲视频欧洲视频| 国产精品免费视频xxxx| 亚洲精品视频网上网址在线观看| 日韩大片免费观看视频播放| 国产成人精品视频在线观看| 91精品久久久久久久久不口人| 欧美黄色成人网| 国产欧美日韩中文字幕在线| 性夜试看影院91社区| 国产亚洲一区精品| 亚洲综合日韩中文字幕v在线| 亚洲欧美在线一区二区| 亚洲精品福利视频| 欧美日韩在线视频首页| 国产成人一区二区| 欧美黑人视频一区| 亚洲午夜未满十八勿入免费观看全集| 亚洲精品乱码久久久久久按摩观| 久久久噜噜噜久噜久久| 久久久久久伊人| 美女扒开尿口让男人操亚洲视频网站| 国产精品一区二区久久精品| 国产色综合天天综合网| 亚洲一区二区久久久久久| 日韩福利伦理影院免费| 国产日本欧美一区二区三区在线| 亚洲欧美制服综合另类| 国产精品人成电影在线观看| 亚洲男人天堂手机在线| 久久精品成人一区二区三区| 欧美日本中文字幕| 久久精品久久久久久| 国语对白做受69| 欧美国产精品日韩| 91在线国产电影| 高清一区二区三区四区五区| 国产精品久久久久秋霞鲁丝| 97精品国产91久久久久久| 亚洲色图av在线| 亚洲性av网站| 中文字幕综合一区| 久久全国免费视频| 97久久精品视频| 国产精品999| 国内精品一区二区三区四区| 中日韩美女免费视频网址在线观看| 8x海外华人永久免费日韩内陆视频| 欧美大片免费观看在线观看网站推荐| 国产成人97精品免费看片| 国产一区二区三区在线观看网站| 777午夜精品福利在线观看| 久久久影视精品| 成人在线免费观看视视频| 中文字幕国内精品| 欧美性少妇18aaaa视频| 狠狠操狠狠色综合网| 日韩欧美极品在线观看| 国产一区二区在线播放| 成人精品久久久| 2018日韩中文字幕| 久久人91精品久久久久久不卡| 色偷偷av亚洲男人的天堂| 中文字幕日韩综合av| 欧美成人精品h版在线观看| 欧美激情第99页| 欧美性视频精品| xxav国产精品美女主播| 色综合亚洲精品激情狠狠| 久久久久久这里只有精品| 不卡毛片在线看| 欧美香蕉大胸在线视频观看| 亚洲福利在线观看| 国产91对白在线播放| 亚洲风情亚aⅴ在线发布| 成人黄色大片在线免费观看| 欧美在线播放视频| 亚州精品天堂中文字幕| 国产欧美日韩视频| 国产精品免费视频xxxx| 国产精自产拍久久久久久蜜| 日韩av电影在线网| 国产一区二区三区三区在线观看| 另类少妇人与禽zozz0性伦| 97视频在线观看播放| 欧美激情精品久久久| 亚洲国产精品va在线看黑人动漫| 欧美野外猛男的大粗鳮| 亚州成人av在线| 久久久久久成人| 亚洲精品美女在线观看播放| 国产91精品不卡视频| 日韩中文字幕网址| 亚洲男人第一av网站| 亚洲xxxx18| 一区二区三区视频观看| 高清日韩电视剧大全免费播放在线观看| 色悠悠久久88| 久久精品国产亚洲7777| 亚洲天堂男人天堂| 国产美女高潮久久白浆| 日韩电影中文字幕在线观看| 欧美日韩国产影院| 国产精品免费看久久久香蕉| 国产精品视频一区二区三区四| 免费av在线一区| 国产精品爽黄69天堂a| 欧美日韩国产区| 午夜精品久久久久久久99热浪潮| 国产日韩av高清| 亚洲自拍偷拍福利| 国产午夜精品美女视频明星a级| 日韩av影院在线观看| 日韩免费在线电影| 久久久国产在线视频| 国模视频一区二区三区| 日本三级久久久| 欧美一级淫片播放口| 中文字幕日韩av综合精品| 亚洲午夜久久久久久久| 欧美日韩激情美女| 亚洲va欧美va国产综合久久| 国产精品视频久| 亚洲xxx大片| 中文国产成人精品久久一| 最新69国产成人精品视频免费| 久久九九热免费视频| 日韩精品免费在线| 亚洲97在线观看| 国产精品www色诱视频| 日本亚洲欧美成人| 色婷婷综合久久久久中文字幕1| 久久久精品在线观看| 亚洲性线免费观看视频成熟| 日韩中文字幕在线观看| 亚洲欧美制服第一页| 色综合老司机第九色激情| 亚洲成人在线网| 在线观看国产精品日韩av| 精品亚洲一区二区三区四区五区| 亚洲精品久久久久久久久久久| 欧美激情精品久久久久久| 国产精品影院在线观看| 久久视频在线直播| 日日摸夜夜添一区| 久久国产精品久久久久| 成人久久18免费网站图片| 精品视频在线播放| 九九久久久久久久久激情| www国产亚洲精品久久网站| 久久影院免费观看| 欧美一性一乱一交一视频| 亚洲中国色老太| 国精产品一区一区三区有限在线| 中文字幕不卡在线视频极品| 国产精品免费一区豆花|