我正在尝试使用此处的代码
http://www.iforce2d.net/b2dtut/raycasting
所以我可以知道一条线是否越过了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;
}
我无法看到在该检查中我如何判断点击点是否在鸟类之前(没有交叉点)或超出(交叉点),无论这些可能性如何,它似乎都会给出相同的结果。
有什么想法吗?
答案 0 :(得分:0)
这是测量单位的问题:你应该将p1和p2坐标(像素或点)转换为box2d坐标(米)。