2015-03-13 2 views
2

Если я определяю открытое UIBezierPath и установить его в качестве границы столкновения:UICollisionBehavior рассматривает открытый путь как закрытый?

_containerPath = [UIBezierPath bezierPathWithArcCenter:center 
               radius:radius 
              startAngle:M_PI 
               endAngle:0 
              clockwise:NO]; 

[_collisionBehavior addBoundaryWithIdentifier:@"containerBoundary" forPath:_containerPath];              

, а затем включите гравитацию, объекты, которые выбрасываются внутри «чаши» уважать нижнюю границу, но объекты освобождены от над миской остановитесь на предположительно несуществующей стороне. Это ожидаемое поведение?

falling rect

В картине, красный прямоугольник был исключен из списка выше; справочным представлением для динамического аниматора является светло-серый прямоугольник. Он упал сверху и остановился на невидимой линии.

Я подтвердил, что если вы переворачиваете траекторию безье, красный прямоугольник действительно уважает изогнутую границу; Я также пробовал это, используя открытый (двухсторонний) треугольник вместо изогнутого пути - тот же результат.

ответ

1

Поведение, которое вы видите, похоже на то, что вы видите, чтобы заполнить путь безье. Если вы нарисуете «V» и заполните его, он будет вести себя так, как если бы он был закрытым путем. С границами столкновений вы можете сделать открытый «V», добавив две строки с помощью addBoundaryWithIdentifier: fromPoint: toPoint :. Я не знаю, что это проблема. Для вашего полукруга, я полагаю, вы могли бы приблизиться к нему с помощью ряда прямых линий, добавленных с помощью метода выше. Я использовал аппроксимированные круги, прежде чем использовать от 50 до 100 строк, которые очень близки к тому, что вы получаете с помощью BezierPathWithOvalInRect. Я не знаю, создает ли это серьезную нагрузку на систему при использовании в качестве границы столкновения.

+1

Я пробовал это с 20 сторонами (для полукруга), и это определенно действительно повлияло на производительность в тесте, где у меня появилось много мелких просмотров. – rdelmar

+0

отличная идея, хотя! спасибо за предложение. Сейчас я изучаю SpriteKit, и интересно отметить, что SKPhysicsBody специально поддерживает два разных типа: тома и края. Я подозреваю, что SK - это путь для меня ... –