2014-01-21 3 views
0

Какой тип тела SKPhysicsBody я использовал бы для создания эллиптической физики?Ellipse SKPhysicsBody

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

ответ

3

Create an elliptical CGPath и создать многоугольник тело с этим путем:

CGPathRef path = CGPathRef CGPathCreateWithEllipseInRect(someRect, nil); 
SKPhysicsBody* body = [SKPhysicsBody bodyWithPolygonFromPath:path]; 

Вполне возможно, однако, что созданный путь создает более 16 вершин (внутренний лимит) для эллипса. В этом случае он будет аварийно завершен, и вам нужно будет создать путь вручную, гарантируя, что он не имеет более 16 пунктов.

Если тело не обязательно должно быть динамичным, вы также можете использовать bodyWithEdgeLoopFromPath: и bodyWithEdgeChainFromPath: - оба не накладывают ограничений на количество вершин.

+0

Я пробовал это, но он сказал мне «неожиданный тип имени CGPathRef, ожидаемое выражение» – majidarif

1

С Sprite Kit не будет принимать тома на основе физики тела с эллиптическим CGPath (это может делать круги, прямоугольники, или любые выпуклые многоугольники до 12 вершин), у вас есть два варианта:

  • Нарисуйте многоугольник, который близок к эллипсу с точностью до 12 вершин - вы можете использовать вспомогательный инструмент, например: http://dazchong.com/spritekit/
  • Идея: если вам нужно круговое перемещение, добавьте физический корпус на основе кругов, затем добавьте ребенка SKNode к вашему спрайту и немного смещать его в сторону, а затем добавить к этому дочернему узлу меньший кругный физический объект. Теперь у вас есть два круговых физических тела. Прополощите и повторите на другой стороне - я полагаю, вы могли бы приблизиться к какой-то облачной/эллиптической форме, всего три таких круга, близких друг к другу. Или вы можете получить лучшие результаты, просто соединяя круглые тела с фиксированным суставом.
Смежные вопросы