Я пытаюсь использовать код здесьПерекресток box2d не работает правильно
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;
}
Я не могу видеть, как в том, что проверить, я могу сказать, если точка клик раньше (не пересечение) или выше (пересечение) птицы, она, похоже, дает тот же результат независимо от любой из этих возможностей.
Любые идеи?
Обратите внимание, что если «ближайшая фигура» остается равной 1, пересечения не было. Что вы подразумеваете под «тем же результатом»? Вы имеете в виду, что вы можете дать этой функции два разных входа и получить точно такое же значение в переменной intersectionPoint? Кажется невозможным. – iforce2d
Это именно то, что я имею в виду, я запустил его, предоставив ему точки p1, p2 до и после объекта, и вы получите тот же результат. – Phil
Это помечено [C++] ??? – AnT