1.如果想要設置某個物體有多邊形的剛體,這樣可以更精確地進行碰撞檢測,可以用以下的方法
auto hero = PlaneHero::create();
addChild(hero, 0, HERO_TAG);
hero->setPosition(Vec2(winSize.width / 2, hero->getContentSize().height / 2 + 10));
//auto herobody = PhysicsBody::createBox(hero->getContentSize()); //這樣設置不太精准
auto herobody = PhysicsBody::create();
Vec2 verts[] = {Vec2(0, 55), Vec2(50, -30), Vec2(-50, -30)}; //根據點組成一個多邊形,這樣設置的PhysicsBody是一個三角形,這里面的點的先后順序必須可以連成一條線,不能隨便寫的,不然會停止運行
//herobody->addShape(PhysicsShapeEdgePolygon::create(verts, 3));(如果是邊界的話用這句)
herobody->addShape(PhysicsShapePolygon::create(verts, 3));(如果是精靈的話用這句)
herobody->setCollisionBitmask(0x0); //不進行碰撞模擬
herobody->setContactTestBitmask(HERO_CONTACTMASKBIT);
herobody->setPositionOffset(Vec2(30, 0));(設置剛體和精靈節點綁定的相對位置,可以讓它不總是在精靈的中心對齊)
hero->setPhysicsBody(herobody);
2.關於PhysicsShapeEdgePolygon函數
static PhysicsShapeEdgePolygon* create ( const Vec2 * points , int count , const PhysicsMaterial & material = PHYSICSSHAPE_MATERIAL_DEFAULT , float border = 1 )
points 多邊形頂點數組。
count 多邊形頂點數量。
material 物理材質PhysicsMaterial對象,默認值是PHYSICSSHAPE_MATERIAL_DEFAULT。
border 這是多邊形的邊框寬度。
例子
Vec2 verts[] = {Vec2(0, 55), Vec2(50, -30), Vec2(-50, -30)}; //根據點組成一個多邊形
herobody->addShape(PhysicsShapeEdgePolygon::create(verts, 3));
