在cocos2dx中检索垒球的过滤器数据时出现EXC_BAD_ACCESS错误

时间:2014-01-23 11:13:52

标签: box2d cocos2d-x

我在我的项目中使用垒球&想要改变它的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();

不知道这有什么问题......

1 个答案:

答案 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,它通过引用返回过滤器,因此它实际上是同一个对象,您可以直接修改它而无需重新分配。