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脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++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会自动在一个新的选项卡中加载该链接。此外,用户还可以根据个人偏

近期不少小伙伴在使用edge浏览器全屏观看b站视频的时候都遇到了卡顿的情况体验很不好,那么该怎么解决呢?下面就一起来看看详细的解决方法吧。edge浏览器b站全屏卡顿:1、打开浏览器输入网址about:flags。2、进入开发者设置。3、点击上方“将所有标志重置为默认”。4、下滑到底,勾选“启用实验性JavaScript功能”即可解决。

1、首先我们右击任务栏空白处,选择【任务管理器】选项,或者右击开始徽标,然后再选择【任务管理器】选项。2、在打开的任务管理器界面,我们点击最右端的【服务】选项卡。3、在打开的【服务】选项卡,点击下方的【打开服务】选项。4、在打开的【服务】窗口,右击【InternetConnectionSharing(ICS)】服务,然后选择【属性】选项。5、在打开的属性窗口,将【打开方式】修改为【禁用】,点击【应用】后点击【确定】。6、点击开始徽标,然后点击关机按钮,选择【重启】,完成电脑重启就行了。

Edge浏览器兼容性怎么设置?大部分的用户都使用Edge浏览器为默认浏览器,当我们在使用Edge浏览器时要使用到Edge浏览器的兼容模式进行网页浏览时,应该如何设置呢?不清楚的小伙伴快跟着小编一起来看看具体的设置方法吧。Edge浏览器兼容性设置方法:方法一:1、点击开始菜单,选择Edge浏览器,如下图所示。2、开Edge浏览器之后,点击右上方的三点图标,如下图所示。为了帮助还没有过关的玩家们,让我们一起来了解一下具体的解谜方法吧。3、Edge浏览器设置兼容模式主要通过ie,点击三点图标,选择“使

edge弹出Microsoft尊重您的隐私怎么办?最近有用户反馈自己使用的edge浏览器经常弹窗Microsoft尊重您的隐私,即使点击了我接受,下次打开浏览器还是会出现。那么到底要怎么关闭这个烦人的弹窗呢?出现这个问题应该是edge浏览器没有接受msn.cn网站的cookie,下面小编就带你看看解决edge弹出Microsoft尊重您的隐私的方法,试下有没有用。解决edge弹出Microsoft尊重您的隐私的方法打开Edge浏览器的设置:隐私、搜索和服务,找到清除浏览数据这一项,点击选择每次关

Edge浏览器内存占用高怎么办?小编发现现在有非常多的小伙伴都喜欢使用微软的Edge浏览器,因为其不仅简洁,还能够安装各种浏览器插件,不过最近有部分小伙伴在使用Edge的时候发现其cpu占用非常高,也就是占用内存过于高,这时候要如何去处理这种情况呢?下面就和小编一起来看看解决方法吧。Edge内存占用高的解决方法1、关闭标签进入edge浏览器点击右上角三个点。在任务栏中选择“扩展”。将不需要使用的插件关闭或者卸载即可。2、更新MicrosoftEdge浏览器请确保您的计算机上已经安装

Edge新建标签页是空白怎么办?Edge浏览器是电脑自带的浏览器,很多的用户们发现在使用中发现自己新建标签页打开是一片空白的,下面就让本站来为用户们来仔细的介绍一下Edge新建标签页是空白的问题解析吧。 Edge新建标签页是空白的问题解析 1、当我们打开新版的Microsoftedge浏览器之后,发现打开的新建标签页是空白的,至右上方的标题和地址栏,或者页面只显示地址栏,和搜索框、Microsoft图标等等。 2、这可能是因为我们设置了启动时“打开新标签页”,我们将其修改
