国产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
主站蜘蛛池模板: 欧美国产精品 | 欧美人伦| 日韩在线观看一区二区三区 | 精品一区二区三区免费毛片爱 | 久久久久久久岛国免费播放 | 国产成人精品一区二区不卡 | 国产精品不卡 | 欧美精品一区二区在线观看 | 国产精品视频不卡 | 91精品一区二区三区在线观看 | 中文国产成人精品久久久 | 日韩国产欧美一区二区三区 | 亚洲成色999久久网站 | 在线免费视频国产 | 日韩一区二区视频 | 欧美一区二区三区香蕉视 | 国产成人成人一区二区 | 在线视频一二三区2021不卡 | 曰韩欧美| 青青热久久综合网伊人 | 国产欧美日韩精品在线 | 欧美雌雄双性人交xxxx | 91麻豆免费观看 | 欧美亚洲韩国 | 在线观看视频日韩 | 国产h视频在线观看 | 国产免费一区二区三区 | 欧美成人精品一级高清片 | 日韩亚洲欧美一区二区三区 | 日韩欧美在线免费观看 | 日韩成人在线观看视频 | 亚洲视频在线免费播放 | 久草中文视频 | 国产在线精品99一卡2卡 | 中文字幕第一区 | 欧美第5页 | 亚洲伦理中文字幕一区 | 国产成人精品999在线观看 | 亚洲国产精品二区久久 | 在线日韩亚洲 | 快播电影网日韩新片 |