Ellipse SKФизикаТело

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

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


person maxhud    schedule 21.01.2014    source источник


Ответы (2)


Создать эллиптический CGPath и создайте тело многоугольника с этим путем:

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

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

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

person LearnCocos2D    schedule 21.01.2014
comment
Я пробовал это, но это говорит мне unexpected type name CGPathRef, expected expression - person majidarif; 02.02.2014

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

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