2014-10-05 2 views
0

Я пытаюсь использовать код здесьПерекресток box2d не работает правильно

http://www.iforce2d.net/b2dtut/raycasting

Так что я могу знать, линия пересекает ли Box2D объект или нет. Он работает наполовину, когда линия пересекает объект, который он показывает как пересечение, однако, если вы нажмете перед объектом, он все равно будет отображаться как пересечение, как будто он не знает, что линия останавливается перед объектом. Из чтения этого кода он не должен этого делать.

Вот скриншот этой проблемы.

enter image description here

А вот метод я использую для проверки

-(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

Обратите внимание, что если «ближайшая фигура» остается равной 1, пересечения не было. Что вы подразумеваете под «тем же результатом»? Вы имеете в виду, что вы можете дать этой функции два разных входа и получить точно такое же значение в переменной intersectionPoint? Кажется невозможным. – iforce2d

+0

Это именно то, что я имею в виду, я запустил его, предоставив ему точки p1, p2 до и после объекта, и вы получите тот же результат. – Phil

+0

Это помечено [C++] ??? – AnT

ответ

0

Это проблема единицы измерения: вы должны преобразовать координаты p1 и p2 (пиксель или точки) в координаты box2d (в метрах).

Смежные вопросы