国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關(guān)鍵字專題關(guān)鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當(dāng)前位置: 首頁 - 科技 - 知識(shí)百科 - 正文

Box2D的EdgeShape的碰撞處理

來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-09 08:09:48
文檔

Box2D的EdgeShape的碰撞處理

Box2D的EdgeShape的碰撞處理:有時(shí)候兩個(gè)body碰撞時(shí)需要精確到某條邊,所以在創(chuàng)建body的時(shí)候需要?jiǎng)?chuàng)建multiFixture,也就是多個(gè)fixture的組合。早期Box2D版本中Polygon Shape有setAsEdge方法設(shè)置每條邊的fixture,v2.2.1之后只有setAsBox方法了。 方法一:可以在每條邊的位置上加
推薦度:
導(dǎo)讀Box2D的EdgeShape的碰撞處理:有時(shí)候兩個(gè)body碰撞時(shí)需要精確到某條邊,所以在創(chuàng)建body的時(shí)候需要?jiǎng)?chuàng)建multiFixture,也就是多個(gè)fixture的組合。早期Box2D版本中Polygon Shape有setAsEdge方法設(shè)置每條邊的fixture,v2.2.1之后只有setAsBox方法了。 方法一:可以在每條邊的位置上加

有時(shí)候兩個(gè)body碰撞時(shí)需要精確到某條邊,所以在創(chuàng)建body的時(shí)候需要?jiǎng)?chuàng)建multiFixture,也就是多個(gè)fixture的組合。早期Box2D版本中Polygon Shape有setAsEdge方法設(shè)置每條邊的fixture,v2.2.1之后只有setAsBox方法了。 方法一:可以在每條邊的位置上加上一個(gè)Edg

有時(shí)候兩個(gè)body碰撞時(shí)需要精確到某條邊,所以在創(chuàng)建body的時(shí)候需要?jiǎng)?chuàng)建multiFixture,也就是多個(gè)fixture的組合。早期Box2D版本中Polygon Shape有setAsEdge方法設(shè)置每條邊的fixture,v2.2.1之后只有setAsBox方法了。

方法一:可以在每條邊的位置上加上一個(gè)Edge Shape,然后再body中加入這個(gè)邊的fixture并保存起來,碰撞的時(shí)候就能判斷是碰到哪條邊了。

方法二:直接用body的createFixture(edgeShape,density)方法,直接創(chuàng)建一條edge的fixture,因?yàn)橐话氵叢恍枰渌麑傩?。默認(rèn)邊有摩擦力和彈力。

邊也是以body中點(diǎn)為原點(diǎn),所以邊的起點(diǎn)和終點(diǎn)要用寬和高的一半來算。

這樣添加后的碰撞種類(以player站在platform)上為例,可分為:

1. player的polygonShape和platform的topEdgeShape碰撞。

2. player的bottomEdgeShape和platform的polygonShape碰撞。

3. player的polygonShape和platform的polygonShape碰撞。

4. player的bottomEdgeShape和platform的topEdgeShape不會(huì)發(fā)生碰撞,因?yàn)樗麄兌际荅dge類型。

edgeShape的長(zhǎng)度比polygonShape相應(yīng)邊的長(zhǎng)度短一點(diǎn),這樣分別在判斷左右兩邊和上下兩邊是否發(fā)生碰撞時(shí),不會(huì)相互影響到。當(dāng)rightEdge碰撞時(shí),bottomEdge不會(huì)發(fā)生碰撞;當(dāng)bottomEdge碰撞時(shí),rightEdge也不會(huì)發(fā)生碰撞。

如果edgeShape的長(zhǎng)度和polygonShape相應(yīng)邊的長(zhǎng)度一樣的話,當(dāng)rightEdge碰撞時(shí),bottomEdge的右端也會(huì)頂?shù)綁ι?,發(fā)生碰撞,從而產(chǎn)生邏輯錯(cuò)誤。比如:設(shè)定bottomShape發(fā)生碰撞時(shí)player的狀態(tài)是isJump=NO,bottomEdge沒有碰撞時(shí)isJump=YES。當(dāng)player跳起并碰到墻壁時(shí),isJump應(yīng)該是YES狀態(tài),但bottomEdge檢查到了碰撞,將isJump設(shè)為NO,這樣player的其他行為和動(dòng)作會(huì)發(fā)生錯(cuò)誤。

或者把矩形polygonShape的直角頂點(diǎn)“切掉”,變成八邊形。

如下圖所示:


1.

 //DELTA_LENGTH = 0.5 
 //fixture1 with polygon shape
 b2PolygonShape rectShape;
 rectShape.SetAsBox(size.x/2/PTM_RATIO, size.y/2/PTM_RATIO);
 
 b2FixtureDef fixtureDef1;
 p_body->CreateFixture(&fixtureDef1);
 
 //fixture2 with edge shape
 b2EdgeShape edgeShape;
 edgeShape.Set(b2Vec2((-size.x/2 + DELTA_LENGTH)/PTM_RATIO, (-size.y/2)/PTM_RATIO), 
 b2Vec2((size.x/2 - DELTA_LENGTH)/PTM_RATIO, (s-size.y/2)/PTM_RATIO));
 
 b2FixtureDef fixtureDef2;
 fixtureDef2.shape = &edgeShape;
 p_bottomFixture = p_body->CreateFixture(&fixtureDef2);

2.

b2EdgeShape edgeShape;
 edgeShape.Set(b2Vec2((-size.x/2 + DELTA_LENGTH)/PTM_RATIO, (-size.y/2)/PTM_RATIO), 
 b2Vec2((size.x/2 - DELTA_LENGTH)/PTM_RATIO, (-size.y/2)/PTM_RATIO));

 p_bottomFixture = p_body->CreateFixture(&edgeShape, 0);

3 polygonShape必須是凸多邊形,頂點(diǎn)按照逆時(shí)針方向依次給出

b2PolygonShape polygonShape;
 b2Vec2 vec[] = {b2Vec2(-size.x/2/PTM_RATIO, -size.y/2/PTM_RATIO), 
 b2Vec2(size.x/2/PTM_RATIO, -size.y/2/PTM_RATIO), 
 b2Vec2(size.x/2/PTM_RATIO, -size.y/4/PTM_RATIO), 
 b2Vec2(size.x/4/PTM_RATIO, size.y/2/PTM_RATIO), 
 b2Vec2(-size.x/4/PTM_RATIO, size.y/2/PTM_RATIO), 
 b2Vec2(-size.x/2/PTM_RATIO, -size.y/4/PTM_RATIO)};
 polygonShape.Set(vec, 6);
 b2FixtureDef fixtureDef1;
 fixtureDef1.shape = &polygonShape;
 fixtureDef1.density = dens;
 fixtureDef1.friction = f;
 fixtureDef1.restitution = rest;
 p_polygonFixture = p_body->CreateFixture(&fixtureDef1);

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

Box2D的EdgeShape的碰撞處理

Box2D的EdgeShape的碰撞處理:有時(shí)候兩個(gè)body碰撞時(shí)需要精確到某條邊,所以在創(chuàng)建body的時(shí)候需要?jiǎng)?chuàng)建multiFixture,也就是多個(gè)fixture的組合。早期Box2D版本中Polygon Shape有setAsEdge方法設(shè)置每條邊的fixture,v2.2.1之后只有setAsBox方法了。 方法一:可以在每條邊的位置上加
推薦度:
標(biāo)簽: 兩個(gè) 處理 EDGE
  • 熱門焦點(diǎn)

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 亚洲精品自产拍在线观看app | 亚洲精品电影 | 国产激情在线观看 | 久久一本日韩精品中文字幕屁孩 | 中文在线第一页 | 久久久性| 国产成人一区二区三区视频免费蜜 | 美女视频黄a视频免费全过程在线 | 国产精品视频大全 | 一本色道久久88综合亚洲精品高清 | 成人欧美日韩 | 日本三级一区二区三区 | 欧美日韩亚洲综合 | 全部费免一级毛片不收费 | 欧美在线观看一区二区三区 | 亚洲国产精品一区二区久 | 国产区精品 | 亚洲国产欧美另类 | 综合精品欧美日韩国产在线 | 一区精品麻豆经典 | 一级高清 | 精品欧美一区二区三区精品久久 | 日韩专区在线观看 | 97伊人网 | 国产手机精品一区二区 | 免费看一级黄色毛片 | 免费国产小视频在线观看 | 四虎影视最新网址 | 欧美日韩国产va另类 | 亚洲欧美日韩三级 | 国产未成女年一区二区 | 国产精品成人一区二区 | 国产成人久久综合二区 | 国产精选视频 | 欧美色图一区二区 | 日韩在线观看一区二区三区 | 日韩欧美不卡一区二区三区 | 国产亚洲欧美一区二区 | 国产在线精选免费视频8x | 国产在线播放一区 | 国产一级在线观看 |