데이터 베이스 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 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Edge 브라우저에서 자동 비밀번호 저장을 활성화하는 방법은 무엇입니까? Edge 브라우저에서 자동 비밀번호 저장을 활성화하는 방법은 무엇입니까? Jan 02, 2024 pm 12:28 PM

우리는 컴퓨터를 사용할 때 원하는 정보를 조회하기 위해 Edge를 선택하는 경우가 많으며, 일부 웹사이트에 로그인할 때 계정과 비밀번호가 필요한데 매번 입력하는 것이 번거롭습니다. ? Edge가 자동으로 비밀번호를 저장하는 것은 어떻습니까? 모르시는 분들을 위해 함께 살펴보겠습니다. Edge에서 비밀번호를 자동으로 저장하는 방법 1. 소프트웨어를 열고 오른쪽 상단에 있는 점 3개로 된 "..." 버튼을 클릭한 후 아래 옵션 목록에서 "설정"을 선택합니다. 2. 창이 열리면 왼쪽에 있는 "개인정보" 옵션을 클릭하세요. 3. 그런 다음 오른쪽에서 "비밀번호를 저장하도록 선택"을 찾아 변경합니다.

Microsoft Edge에서 슈퍼 드래그 앤 드롭 모드를 활성화하는 방법 Microsoft Edge에서 슈퍼 드래그 앤 드롭 모드를 활성화하는 방법 Mar 18, 2024 am 09:40 AM

Microsoft Edge의 끌어서 놓기 기능을 사용하면 웹 페이지의 링크나 텍스트를 쉽게 열 수 있어 실용적이면서 시간도 절약됩니다. 이 기능을 사용하려면 페이지의 아무 곳에나 링크나 텍스트를 끌어다 놓으면 됩니다. 이 문서에서는 Microsoft Edge에서 슈퍼 드래그 앤 드롭 모드를 활성화 또는 비활성화하는 방법을 보여줍니다. Microsoft Edge의 슈퍼 드래그 앤 드롭 모드란 무엇입니까? Microsoft Edge에서는 사용자가 링크를 끌어서 놓아 새 탭에서 빠르게 열 수 있는 "수퍼 드래그 앤 드롭"이라는 새로운 기능을 도입했습니다. Edge 브라우저 창의 아무 곳에나 링크를 끌어다 놓기만 하면 됩니다. Edge는 자동으로 새 탭에 링크를 로드합니다. 또한 사용자는 다음을 수행할 수도 있습니다.

CPU를 너무 많이 점유하는 WIN10 서비스 호스트의 동작 과정 CPU를 너무 많이 점유하는 WIN10 서비스 호스트의 동작 과정 Mar 27, 2024 pm 02:41 PM

1. 먼저 작업 표시줄의 빈 공간을 마우스 오른쪽 버튼으로 클릭하고 [작업 관리자] 옵션을 선택하거나, 시작 로고를 마우스 오른쪽 버튼으로 클릭한 후 [작업 관리자] 옵션을 선택합니다. 2. 열린 작업 관리자 인터페이스에서 맨 오른쪽에 있는 [서비스] 탭을 클릭합니다. 3. 열린 [서비스] 탭에서 아래의 [서비스 열기] 옵션을 클릭하세요. 4. 열리는 [서비스] 창에서 [InternetConnectionSharing(ICS)] 서비스를 마우스 오른쪽 버튼으로 클릭한 후 [속성] 옵션을 선택하세요. 5. 열리는 속성 창에서 [연결 프로그램]을 [사용 안 함]으로 변경하고 [적용]을 클릭한 후 [확인]을 클릭하세요. 6. 시작 로고를 클릭한 후 종료 버튼을 클릭하고 [다시 시작]을 선택한 후 컴퓨터를 다시 시작합니다.

스테이션b의 전체 화면 모드에서 엣지 브라우저의 지연 문제 해결 스테이션b의 전체 화면 모드에서 엣지 브라우저의 지연 문제 해결 Jan 12, 2024 pm 11:00 PM

최근에 많은 친구들이 엣지 브라우저를 사용하여 Bilibili의 비디오를 전체 화면으로 볼 때 지연이 발생했으며, 경험이 매우 나빴습니다. 그렇다면 이를 해결하는 방법은 무엇입니까? 아래에서 자세한 솔루션을 살펴보겠습니다. Edge 브라우저 스테이션 B가 전체 화면에서 멈춥니다. 1. 브라우저를 열고 URL about:flags를 입력합니다. 2. 개발자 설정을 입력합니다. 3. 위의 '모든 로고를 기본값으로 재설정'을 클릭하세요. 4. 아래로 스크롤하여 "실험적 JavaScript 기능 활성화"를 선택하여 문제를 해결하십시오.

Edge 브라우저 호환성을 설정하는 방법은 무엇입니까? Edge 브라우저 호환 모드를 활성화하는 방법에 대한 튜토리얼 Edge 브라우저 호환성을 설정하는 방법은 무엇입니까? Edge 브라우저 호환 모드를 활성화하는 방법에 대한 튜토리얼 Jan 07, 2024 pm 01:50 PM

Edge 브라우저 호환성을 설정하는 방법은 무엇입니까? 대부분의 사용자는 Edge 브라우저를 기본 브라우저로 사용합니다. 웹 탐색에 Edge 브라우저의 호환 모드를 사용하려면 어떻게 설정해야 합니까? 확실하지 않은 분들은 편집자를 따라 구체적인 설정 방법을 확인하시기 바랍니다. Edge 브라우저 호환성 설정 방법: 방법 1: 1. 아래 그림과 같이 시작 메뉴를 클릭하고 Edge 브라우저를 선택합니다. 2. Edge 브라우저를 연 후, 아래 그림과 같이 오른쪽 상단에 있는 점 3개 아이콘을 클릭하세요. 아직 레벨을 통과하지 못한 플레이어에게 도움을 주기 위해 구체적인 퍼즐 해결 방법을 살펴보겠습니다. 3. Edge 브라우저의 호환성 모드는 주로 점 3개 아이콘을 클릭하고 "활성화"를 선택하여 설정됩니다.

개인 정보를 존중하는 Microsoft Edge 팝업을 처리하는 방법 개인 정보를 존중하는 Microsoft Edge 팝업을 처리하는 방법 Jan 31, 2024 pm 02:14 PM

Microsoft가 귀하의 개인 정보를 존중한다는 Edge 팝업이 나타나면 어떻게 해야 합니까? 최근 일부 사용자는 자신이 사용하는 엣지 브라우저에서 "Microsoft는 귀하의 개인정보를 존중합니다."라는 메시지가 자주 표시된다고 보고했습니다. 동의함을 클릭해도 다음에 브라우저를 열 때 계속 표시됩니다. 그렇다면 이 짜증나는 팝업 창을 어떻게 닫나요? 이 문제는 Edge 브라우저가 msn.cn 웹사이트의 쿠키를 허용하지 않기 때문에 발생합니다. 다음 편집기는 Microsoft가 귀하의 개인 정보를 존중한다는 메시지가 Edge에서 나타나는 문제를 해결하는 방법을 보여줍니다. Edge가 나타날 때 Microsoft가 귀하의 개인 정보를 존중하는 문제를 해결하는 방법 Edge 브라우저의 설정: 개인 정보 보호, 검색 및 서비스를 열고 검색 데이터 지우기 항목을 찾은 다음 매번 끄기를 클릭하여 선택합니다.

Edge 브라우저의 메모리 사용량을 줄이는 방법은 무엇입니까? Edge 메모리 사용량 문제에 대한 솔루션 Edge 브라우저의 메모리 사용량을 줄이는 방법은 무엇입니까? Edge 메모리 사용량 문제에 대한 솔루션 Jan 05, 2024 pm 05:54 PM

Edge 브라우저의 메모리 사용량이 많으면 어떻게 해야 하나요? 편집자는 이제 많은 친구들이 Microsoft의 Edge 브라우저를 사용하기를 좋아한다는 것을 발견했습니다. 그 이유는 그것이 간단할 뿐만 아니라 다양한 브라우저 플러그인을 설치할 수 있기 때문입니다. 그러나 최근 일부 친구들은 Edge를 사용할 때 CPU 사용량이 매우 높다는 것을 발견했습니다. , 즉, 메모리 사용량이 너무 높습니다. 이 상황을 처리하는 방법은 무엇입니까? 아래 편집기를 사용하여 솔루션을 살펴보겠습니다. Edge의 높은 메모리 사용량 해결 방법 1. 탭을 닫고 Edge 브라우저에 들어가서 오른쪽 상단에 있는 세 개의 점을 클릭합니다. 작업 표시줄에서 "확장"을 선택합니다. 필요하지 않은 플러그인을 닫거나 제거하면 됩니다. 2. Microsoft Edge 브라우저를 업데이트하여 컴퓨터에 설치되어 있는지 확인하세요.

Edge 브라우저에 사이트가 안전하지 않다고 표시되면 어떻게 해야 합니까? 사이트가 안전하지 않다는 것을 보여주는 Edge 브라우저에 대한 솔루션 Edge 브라우저에 사이트가 안전하지 않다고 표시되면 어떻게 해야 합니까? 사이트가 안전하지 않다는 것을 보여주는 Edge 브라우저에 대한 솔루션 Jan 07, 2024 am 11:42 AM

Edge 브라우저에 사이트가 안전하지 않다고 표시되면 어떻게 해야 합니까? Edge 브라우저는 Microsoft에서 출시한 브라우저이며 Edge 브라우저의 보안은 매우 안정적이지만 Edge 브라우저에서 무언가를 다운로드했는데 해당 사이트가 안전하지 않아 다운로드할 수 없다는 메시지가 표시되면 어떻게 해야 할까요? 아래 편집기를 살펴보십시오. 이 문제를 해결하는 방법은 무엇입니까? Edge 브라우저에 사이트가 안전하지 않다고 표시되는 문제 해결 방법 1. 브라우저를 열고 오른쪽 상단에 있는 점 세 개를 클릭하세요. 2. 작업 표시줄에서 "설정"을 클릭하세요. 3. 왼쪽 작업 표시줄에서 "개인정보 및 보안"을 클릭하세요. 아직 레벨을 통과하지 못한 플레이어에게 도움을 주기 위해 구체적인 퍼즐 해결 방법을 살펴보겠습니다. 한 가지 방법은 게임 설정에서 "w"를 찾는 것입니다.

See all articles