我在我的项目中使用垒球&想要改变它的groupindex,而它碰撞某种类型的障碍....因为我使用下面的代码
void HelloWorld::collide()
{
for (int i=0; i<13; i++) {
b2Body *body=(b2Body *)node->bodies->objectAtIndex(i);
b2Fixture *fixture=body->GetFixtureList();
b2Filter filterdata=fixture->GetFilterData();
filterdata.groupIndex=-8;
fixture->SetFilterData(filterdata);
}
b2Fixture *fixture=node->innerCircleBody->GetFixtureList();
b2Filter filterdata=fixture->GetFilterData();
filterdata.groupIndex=-8;
fixture->SetFilterData(filterdata);
world->SetGravity(b2Vec2(0, 0));
}
但在b2Filter获取EXC_BAD_ACCESS filterdata = fixture-&gt; GetFilterData();
不知道这有什么问题......
答案 0 :(得分:0)
并非每个人都有固定装置(形状)。在访问之前检查夹具是否为NULL。
此外,由于filterData为returned by reference,因此您无需再次设置它。替换这个:
b2Filter filterdata=fixture->GetFilterData();
filterdata.groupIndex=-8;
fixture->SetFilterData(filterdata);
有了它,它会正常工作:
b2Filter filterdata=fixture->GetFilterData();
filterdata.groupIndex=-8;
GetFilterData不复制b2Filter,它通过引用返回过滤器,因此它实际上是同一个对象,您可以直接修改它而无需重新分配。