box2d凹多边形的问题(多个fixture)

从昨天开始一直纠结于一个问题,就是我做的colorball中,用cctouchmove,但是小球一直就是有一些消不完全。
刚开始时怀疑cctouchmove的问题,由于cctouchmove在执行过程中,当用户鼠标或者手滑的很快的时候,倒是cctouchmove记录的点的个数严重不足,仅仅会记录几个离散的点。于是自己感觉是这方面的原因,所以今天早上开始写了一个自动补全点的函数,将剩下的空的点补全。可是,当写完后,进行测试,虽然可以解决一部分滑的过快导致的问题,但是还是没有完全解决有时候不能完全消去的问题,我是百思不得其解。

做的过程中我甚至有一种冲动说,不做了,就这样吧。但是我还是坚持了下来,下午我又重新整理了一下思路,初步怀疑是多边形的问题,于是我将ball设为一个,然后单独测试这个,并且将box2d中DrawDebugData这个功能开启,以利于我看清楚问题,终于我发现一个问题,box2d的凹多边形竟然是分开组装的,于是我看到了突破口。再进一步的测试中发现,在一个凹多变形中,TestPoint方法总是只能检测一个被分开的凸多边形,这一下我就蒙了,到底是为什么呢,我想了好长时间也没有想出来,但是我还是很高兴,至少我知道了问题的所在。于是我整理了一下情绪,继续找问题。于是我开始用万能的google来寻找问题,不过查了半天也是没有结果,最后在一个网站上发现原来,当一个body 去create多个b2fixture的时候,需要在用到它的时候GetFixtureList来遍历所有的fixture,虽然当时我写代码的时候,曾经在这里疑惑过,为什么是一个list呢, 但是由于结果对了,所以也就没有深究,这下怪只能怪自己当时不够打破砂锅问到底了。不过还是解决了问题,突然感觉还是非常高兴的。
下面是遍历的方法。

for (b2Fixture* f = b->GetFixtureList(); f; f = f->GetNext())
{

}

从这次教训中也必须吸取经验,以后有问题一定要以积极的态度去解决,并且一定要想到每一个小的细节。

写这篇博客来记录自己这次问题解决的历程。

1 thought on “box2d凹多边形的问题(多个fixture)”

Sarah进行回复 取消回复

电子邮件地址不会被公开。 必填项已用*标注