Box2D的Edge Shape的碰撞处理
有时候两个body碰撞时需要精确到某条边,所以在创建body的时候需要创建multiFixture,也就是多个fixture的组合。早期Box2D版本中Polygon Shape有setAsEdge方法设置每条边的fixture,v2.2.1之后只有setAsBox方法了。 方法一:可以在每条边的位置上加上一个Edg
有时候两个body碰撞时需要精确到某条边,所以在创建body的时候需要创建multiFixture,也就是多个fixture的组合。早期Box2D版本中Polygon Shape有setAsEdge方法设置每条边的fixture,v2.2.1之后只有setAsBox方法了。
方法一:可以在每条边的位置上加上一个Edge Shape,然后再body中加入这个边的fixture并保存起来,碰撞的时候就能判断是碰到哪条边了。
方法二:直接用body的createFixture(edgeShape,density)方法,直接创建一条edge的fixture,因为一般边不需要其他属性。默认边有摩擦力和弹力。
边也是以body中点为原点,所以边的起点和终点要用宽和高的一半来算。
这样添加后的碰撞种类(以player站在platform)上为例,可分为:
1. player的polygonShape和platform的topEdgeShape碰撞。
2. player的bottomEdgeShape和platform的polygonShape碰撞。
3. player的polygonShape和platform的polygonShape碰撞。
4. player的bottomEdgeShape和platform的topEdgeShape不会发生碰撞,因为他们都是Edge类型。
edgeShape的长度比polygonShape相应边的长度短一点,这样分别在判断左右两边和上下两边是否发生碰撞时,不会相互影响到。当rightEdge碰撞时,bottomEdge不会发生碰撞;当bottomEdge碰撞时,rightEdge也不会发生碰撞。
如果edgeShape的长度和polygonShape相应边的长度一样的话,当rightEdge碰撞时,bottomEdge的右端也会顶到墙上,发生碰撞,从而产生逻辑错误。比如:设定bottomShape发生碰撞时player的状态是isJump=NO,bottomEdge没有碰撞时isJump=YES。当player跳起并碰到墙壁时,isJump应该是YES状态,但bottomEdge检查到了碰撞,将isJump设为NO,这样player的其他行为和动作会发生错误。
或者把矩形polygonShape的直角顶点“切掉”,变成八边形。
如下图所示:
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必须是凸多边形,顶点按照逆时针方向依次给出
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);

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

很多時候我們在使用電腦時都會選擇Edge來查詢自己想要的信息,並且在登錄一些網站的時候是需要帳號密碼的,不過每次都要輸入就比較麻煩,這時我們要如何操作才能夠使Edge自動儲存密碼呢?不清楚的小夥伴就一起來看看吧。 Edge自動儲存密碼的方法1、開啟軟體,點選右上角的三個點「...」按鈕,選擇下方選項清單中的「設定」。 2、在開啟的視窗介面中,點選左側中的「個人資料」選項。 3、然後找到右側的“讓我選擇儲存密碼”,將

MicrosoftEdge的拖放功能讓您可以輕鬆開啟網頁上的連結或文本,這種功能既實用又省時。要使用此功能,只需將連結或文字拖放到網頁的任意位置即可。本文將向您介紹如何在MicrosoftEdge中啟用或停用超級拖放模式。什麼是MicrosoftEdge中的超級拖放模式?微軟Edge引進了一項名為「超級拖放」的新功能,用戶只需簡單地拖放連結即可在新分頁中快速開啟。只需將連結拖曳到Edge瀏覽器視窗的任何位置即可輕鬆實現。 Edge會自動在一個新的選項卡中載入該連結。此外,用戶還可以根據個人偏

1.首先我們右鍵點選任務列空白處,選擇【任務管理器】選項,或右鍵開始徽標,然後再選擇【任務管理器】選項。 2.在開啟的任務管理器介面,我們點選最右邊的【服務】選項卡。 3.在開啟的【服務】選項卡,點選下方的【開啟服務】選項。 4.在開啟的【服務】窗口,右鍵點選【InternetConnectionSharing(ICS)】服務,然後選擇【屬性】選項。 5.在開啟的屬性窗口,將【開啟方式】修改為【禁用】,點選【應用程式】後點選【確定】。 6.點選開始徽標,然後點選關機按鈕,選擇【重啟】,完成電腦重啟就行了。

近期不少朋友在使用edge瀏覽器全螢幕觀看b站影片的時候都遇到了卡頓的狀況體驗很不好,那該怎麼解決呢?下面就一起來看看詳細的解決方法吧。 edge瀏覽器b站全螢幕卡頓:1、開啟瀏覽器輸入網址about:flags。 2、進入開發者設定。 3.點擊上方「將所有標誌重設為預設」。 4.下滑到底,勾選「啟用實驗性JavaScript功能」即可解決。

Edge瀏覽器記憶體佔用高怎麼辦?小編發現現在有非常多的小夥伴都喜歡使用微軟的Edge瀏覽器,因為其不僅簡潔,還能夠安裝各種瀏覽器插件,不過最近有部分小伙伴在使用Edge的時候發現其cpu佔用非常高,也就是佔用記憶體過於高,這時候要如何處理這種情況呢?下面就跟小編一起來看看解決方法吧。 Edge記憶體佔用高的解決方法1、關閉標籤進入edge瀏覽器點擊右上角三個點。在工作列中選擇“擴展”。將不需要使用的插件關閉或卸載即可。 2、更新MicrosoftEdge瀏覽器請確保您的電腦上已經安裝

edge彈出Microsoft尊重您的隱私怎麼辦?最近有使用者回饋自己使用的edge瀏覽器經常彈窗Microsoft尊重您的隱私,即使點擊了我接受,下次打開瀏覽器還是會出現。那麼到底要怎麼關閉這個煩人的彈跳窗呢?出現這個問題應該是edge瀏覽器沒有接受msn.cn網站的cookie,下面小編就帶你去看看解決edge彈出Microsoft尊重您的隱私的方法,試下有沒有用。解決edge彈出Microsoft尊重您的隱私的方法開啟Edge瀏覽器的設定:隱私、搜尋和服務,找到清除瀏覽資料這一項,點擊選擇每次關

Edge瀏覽器相容性怎麼設定?大部分的使用者都使用Edge瀏覽器為預設瀏覽器,當我們在使用Edge瀏覽器時要使用到Edge瀏覽器的相容模式進行網頁瀏覽時,應該如何設定呢?不清楚的小夥伴快跟著小編一起來看看具體的設定方法吧。 Edge瀏覽器相容性設定方式:方法一:1、點選開始選單,選擇Edge瀏覽器,如下圖所示。 2.開啟Edge瀏覽器之後,點選右上方的三點圖標,如下圖所示。為了幫助還沒過關的玩家們,讓我們一起來了解具體的解謎方法吧。 3.Edge瀏覽器設定相容模式主要透過ie,點擊三點圖標,選擇「使

Edge如何設定右鍵選單? Edge瀏覽器是微軟所推出的一款瀏覽器軟體,也是有不少小夥伴都在使用,而我們在使用過程中也是會常用到右鍵選單的功能,不過還是有不少小夥伴不清楚其右鍵要如何設置,那麼下面就和小編一起看看Edge設定右鍵選單的方法,有需要的使用者可不要錯過。 Edge設定右鍵選單的方法方法一首先,開啟Edge瀏覽器,點選右上角的「...」按鈕。 2、接著打開下面的“設定”,如圖所示。接下來,在遊戲介面的上方搜尋欄中輸入"右鍵",點擊搜尋按鈕。這樣你就能找到右鍵選單的設定選項了。方
