首页 数据库 mysql教程 Box2D的Edge Shape的碰撞处理

Box2D的Edge Shape的碰撞处理

Jun 07, 2016 pm 03:13 PM
edge 处理

有时候两个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的直角顶点“切掉”,变成八边形。

如下图所示:

Box2D的Edge Shape的碰撞处理

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);
登录后复制


本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
2 周前 By 尊渡假赌尊渡假赌尊渡假赌
仓库:如何复兴队友
4 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
4 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Edge浏览器如何启用自动密码保存功能? Edge浏览器如何启用自动密码保存功能? Jan 02, 2024 pm 12:28 PM

很多时候我们在使用电脑时都会选择Edge来查询自己想要的信息,并且在登录一些网站的时候是需要账号密码的,不过每次都要输入就比较麻烦,这时我们要如何操作才能够使Edge自动保存密码呢?不清楚的小伙伴就一起来看看吧。Edge自动保存密码的方法1、打开软件,点击右上角的三个点“...”按钮,选择下方选项列表中的“设置”。2、在打开的窗口界面中,点击左侧中的“个人资料”选项。3、然后找到右侧中的“让我选择保存密码”,将

如何在微软Edge中启用超级拖放模式 如何在微软Edge中启用超级拖放模式 Mar 18, 2024 am 09:40 AM

MicrosoftEdge的拖放功能让您可以方便地打开网页上的链接或文本,这种功能既实用又省时。要使用这一功能,只需将链接或文本拖放到网页的任意位置即可。本文将向您介绍如何在MicrosoftEdge中启用或禁用超级拖放模式。什么是MicrosoftEdge中的超级拖放模式?微软Edge引入了一项名为“超级拖放”的新功能,用户只需简单地拖放链接即可在新标签页中快速打开。只需将链接拖拽到Edge浏览器窗口的任何位置即可轻松实现。Edge会自动在一个新的选项卡中加载该链接。此外,用户还可以根据个人偏

解决edge浏览器在b站全屏模式下的卡顿问题 解决edge浏览器在b站全屏模式下的卡顿问题 Jan 12, 2024 pm 11:00 PM

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

WIN10服务主机太占cpu的处理操作过程 WIN10服务主机太占cpu的处理操作过程 Mar 27, 2024 pm 02:41 PM

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

Edge浏览器兼容性怎么设置?Edge浏览器兼容模式开启方法教学 Edge浏览器兼容性怎么设置?Edge浏览器兼容模式开启方法教学 Jan 07, 2024 pm 01:50 PM

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

如何处理Microsoft尊重您隐私的edge弹窗 如何处理Microsoft尊重您隐私的edge弹窗 Jan 31, 2024 pm 02:14 PM

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

如何降低Edge浏览器的内存占用?Edge内存占用问题的解决方法 如何降低Edge浏览器的内存占用?Edge内存占用问题的解决方法 Jan 05, 2024 pm 05:54 PM

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

Edge新建标签页是空白怎么办?Edge新建标签页是空白的问题解析 Edge新建标签页是空白怎么办?Edge新建标签页是空白的问题解析 Mar 13, 2024 pm 10:55 PM

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

See all articles