<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
        主站蜘蛛池模板: 久久久久久AV无码免费网站下载| 未满十八私人高清免费影院| 久草视频在线免费看| 久久精品国产精品亚洲| 一本久久免费视频| 精品亚洲成α人无码成α在线观看| 精品特级一级毛片免费观看| 国产亚洲福利一区二区免费看| 免费VA在线观看无码| 国产精品V亚洲精品V日韩精品| 中文字幕的电影免费网站| 精品久久久久久亚洲| 免费观看成人久久网免费观看| 亚洲好看的理论片电影| 免费v片在线观看视频网站| 久久精品国产亚洲αv忘忧草| 成年女人午夜毛片免费看| 亚洲国产综合AV在线观看| 国产在线19禁免费观看国产| 搜日本一区二区三区免费高清视频 | 精品亚洲成a人在线观看| 亚洲综合色区在线观看| 国产免费一区二区视频| 亚洲一卡2卡4卡5卡6卡残暴在线| 国产成人免费高清激情视频| 在线看亚洲十八禁网站| 亚洲人成色7777在线观看| 免费能直接在线观看黄的视频| 亚洲AV永久无码天堂影院| 亚洲精品亚洲人成人网| 成人黄色免费网址| 男男黄GAY片免费网站WWW| 亚洲第一AAAAA片| 四虎在线视频免费观看| 一级毛片免费在线播放| 精品亚洲麻豆1区2区3区| 国产免费直播在线观看视频| 午夜免费福利小电影| 亚洲乱妇熟女爽到高潮的片| 亚洲综合在线另类色区奇米| 免费H网站在线观看的|