<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答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)前位置: 首頁 - 科技 - 知識百科 - 正文

        Box2D的EdgeShape的碰撞處理

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

        Box2D的EdgeShape的碰撞處理

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

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

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

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

        方法二:直接用body的createFixture(edgeShape,density)方法,直接創(chuàng)建一條edge的fixture,因?yàn)橐话氵叢恍枰渌麑傩浴DJ(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不會發(fā)生碰撞,因?yàn)樗麄兌际荅dge類型。

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

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

        或者把矩形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)按照逆時針方向依次給出

        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)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        Box2D的EdgeShape的碰撞處理

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

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 国产黄色片在线免费观看| 毛片网站免费在线观看| 久久九九亚洲精品| 97在线免费视频| 亚洲国产精品一区二区久久hs| 黄色网页在线免费观看| 亚洲日韩av无码| 蜜桃成人无码区免费视频网站 | 色屁屁在线观看视频免费| 免费一级毛片不卡不收费| h视频在线免费观看| 国产成人精品日本亚洲| 每天更新的免费av片在线观看| 亚洲专区一路线二| 青青草国产免费久久久91| 亚洲AV日韩综合一区| 亚洲精品乱码久久久久久不卡| 免费在线黄色电影| 亚洲成人福利网站| 免费jjzz在线播放国产| 国产在线播放线91免费| 亚洲日本香蕉视频| 国产三级免费电影| 日韩精品无码免费专区午夜不卡| 亚洲短视频男人的影院| 毛片在线免费视频| 一级毛片人与动免费观看| 91亚洲导航深夜福利| 免费一区二区三区四区五区| 成全视频免费观看在线看| 亚洲va在线va天堂成人| 亚洲电影日韩精品| 性色午夜视频免费男人的天堂| 亚洲精品无码专区久久| 亚洲VA成无码人在线观看天堂| 女人被弄到高潮的免费视频| 国产免费一区二区三区在线观看| 亚洲男人天堂2018av| 亚洲宅男天堂在线观看无病毒| 我们的2018在线观看免费高清 | 亚洲性色精品一区二区在线|