C++ box2d中的交叉点工作不正常

C++ box2d中的交叉点工作不正常,c++,box2d,C++,Box2d,我正在尝试使用这里的代码 所以我可以知道一条线是否与box2d对象相交。它起到了一半的作用,因为当直线穿过对象时,它确实显示为交点,但是,如果在对象之前单击,它仍然显示为交点,好像它不知道直线在对象之前停止。通过阅读此代码,它不应该这样做 这是该问题的屏幕截图 这是我用来检查的方法 -(b2Vec2)rayCheckWithInput:(b2Vec2)p1 andX:(b2Vec2)p2 { b2RayCastInput input; input.p1 = p1; i

我正在尝试使用这里的代码

所以我可以知道一条线是否与box2d对象相交。它起到了一半的作用,因为当直线穿过对象时,它确实显示为交点,但是,如果在对象之前单击,它仍然显示为交点,好像它不知道直线在对象之前停止。通过阅读此代码,它不应该这样做

这是该问题的屏幕截图

这是我用来检查的方法

-(b2Vec2)rayCheckWithInput:(b2Vec2)p1 andX:(b2Vec2)p2
{
    b2RayCastInput input;
    input.p1 = p1;
    input.p2 = p2;
    input.maxFraction = 1;

    //check every fixture of every body to find closest
    float closestFraction = 1; //start with end of line as p2
    b2Vec2 intersectionNormal(0,0);
    //for (b2Body* b = self.world.world->GetBodyList(); b; b = b->GetNext()) {
        for (b2Fixture* f = box.body->GetFixtureList(); f; f = f->GetNext()) {

            b2RayCastOutput output;
            if ( ! f->RayCast( &output, input, 0 ) )
            {
                NSLog(@"Not Intersected");
                continue;
            }
            if ( output.fraction < closestFraction ) {
                closestFraction = output.fraction;
                intersectionNormal = output.normal;

                NSLog(@"Intersected");
                NSLog(@"%f %f,", output.normal.x, output.normal.y);
                NSLog(@"%f", output.fraction);
            }
            else{
                NSLog(@"Intersected2");
                NSLog(@"%f %f,", output.normal.x, output.normal.y);
                NSLog(@"%f", output.fraction);

            }
        }
    //}

    b2Vec2 intersectionPoint = p1 + closestFraction * (p2 - p1);

    NSLog(@"I point %f, %f", intersectionPoint.x, intersectionPoint.y);

    return intersectionPoint;
}
-(b2Vec2)光线检查输入:(b2Vec2)p1和x:(b2Vec2)p2
{
b2输入;
input.p1=p1;
input.p2=p2;
input.maxFraction=1;
//检查每个物体的每个固定装置,以找到最近的
float closestFraction=1;//以行尾p2开始
b2Vec2相交法线(0,0);
//对于(b2Body*b=self.world.world->GetBodyList();b;b=b->GetNext()){
对于(b2Fixture*f=box.body->GetFixtureList();f;f=f->GetNext()){
b2输出;
如果(!f->光线投射(&输出,输入,0))
{
NSLog(@“未相交”);
继续;
}
if(输出分数<最接近分数){
closestFraction=output.fraction;
intersectionNormal=output.normal;
NSLog(@“相交”);
NSLog(@“%f%f”,output.normal.x,output.normal.y);
NSLog(@“%f”,输出分数);
}
否则{
NSLog(@“相交2”);
NSLog(@“%f%f”,output.normal.x,output.normal.y);
NSLog(@“%f”,输出分数);
}
}
//}
b2Vec2相交点=p1+最接近分数*(p2-p1);
NSLog(@“I点%f,%f”,intersectionPoint.x,intersectionPoint.y);
返回交点;
}
我看不出在该检查中,我如何判断单击点是在鸟之前(无交叉点)还是在鸟之后(交叉点),它似乎给出了相同的结果,而不管这些可能性如何


有什么想法吗?

这是测量单位的问题:您应该将p1和p2坐标(像素或点)转换为box2d坐标(米)。

请注意,如果“最接近分数”保持为1,则没有交点。“相同的结果”是什么意思?你的意思是你可以给这个函数两个不同的输入,然后在intersectionPoint变量中得到完全相同的值?似乎不可能。这正是我的意思,我已经运行了它,在对象之前和之后给它p1,p2点,你会得到相同的输出。这被标记为[C++]???