关于box2d的碰撞以及bullet属性问题

近期为了做出更精确的碰撞检测,所以在学习使用BOX2D物理引擎
学习教程自己写了一些body进行判断,之前有了解过bullet属性会使运动物体的碰撞检测更加精确,防止穿透
但是最近我在测试的时候发现这样一些问题

首先是我的两个body定义以及属性

b2BodyDef spriteBodyDef;
    spriteBodyDef.type = b2BodyType::b2_dynamicBody;
    //这里的sprite是随便给的,以后不准备这样使用。
    spriteBodyDef.position = b2Vec2(sprite->getPositionX() / PTM_RATIO, sprite->getPositionY() / PTM_RATIO);
    //spriteBodyDef.userData = sprite;
    spriteBodyDef.bullet = true;
    b2Body* spriteBody = m_pWorld->CreateBody(&spriteBodyDef);
    //使其在x轴匀速运动,例如给予一个非常快的速度
    b2Vec2 v;
    v.y = 0;
    v.x = 10000.0f;
    spriteBody->SetLinearVelocity(v)

    b2PolygonShape shape;
    shape.SetAsBox(sprite->getTextureRect().getMaxX() / PTM_RATIO / 8, sprite->getTextureRect().getMaxY() / PTM_RATIO / 8);
    b2FixtureDef shapeDef;
    shapeDef.shape = &shape;
    shapeDef.density = 10.0f;
    //Sensor属性为true
    shapeDef.isSensor = true;
    spriteBody->CreateFixture(&shapeDef);

另一个物体大小是其两倍,方向相反,速度慢

b2Body* spriteBody = m_pWorld->CreateBody(&spriteBodyDef);
    b2Vec2 v;
    v.y = 0;
    v.x = -100.0f;
    spriteBody->SetLinearVelocity(v);

两个sprite大小一样,x轴位置相同。

shape.SetAsBox(sprite->getTextureRect().getMaxX() / PTM_RATIO / 4, sprite->getTextureRect().getMaxY() / PTM_RATIO / 4);

检测设置如下,在使用Box2d的Layer的update函数中:

float dt = 1 / 60.0f;m_pWorld->Step(dt, 10, 10);

并且设置了一个listener监听碰撞,碰撞发生时仅log输出,因为目前不做其他处理

发现的问题:
如果两者速度相向运动相对速度非常快,那么设置了bullet也检测不到,这个也可以理解。
稍微降低一点速度后,设置bullet为true时可以检测到,但是在此速度下把bullet置为false依然能检测到
那么是我这样设置速度检测的方式不对还是bullet属性的用法不对呢?

另外还有一个问题
另外还测试了下,如果不给body设置速度,让之与sprite关联,直接给sprite一个action让它去移动,然后每一帧在update函数里根据sprite位置去更新body的话,那么似乎速度稍快就检测不到了,和设置Rect类的判定框然后每帧去检测碰撞的精确度差不多,那么这样的方法是不是就不可取了?
是不是如果使用BOX2D进行碰撞检测的话,那么物体的移动方案最好是编写body的移动逻辑(例如根据路径点匀移动,到达每个路径点后给予body一个速度让其移动到下个路径点),然后使用body反过来确定sprite或者物体逻辑(sprite作为物体的成员仅负责渲染)的位置?
也就是说,不使用sprite的action进行逻辑运算(这个倒是自己实现了和action类似的方法,效果类似于MoveTo,MoveBy之类的,但是调用方式和实现逻辑不同)?

初学box2d,有很多问题还不太了解,请大家多多指教,谢谢了~!