Как я могу сделать SKPhysicsBody для этого изображения, используя CGPath? - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь создать тело SKPhysics для этого SKSpriteNode, используя многоугольник CGPath.

enter image description here

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

Вот код, который я использую:

 let triangle = SKSpriteNode(imageNamed: "Triangle_ZigZag")
 let trianglePath = CGMutablePath()

 trianglePath.addLines(between: [CGPoint(x: triangle.size.width, 
                                 y: triangle.size.height),

                                CGPoint(x: triangle.size.width, 
                                 y: - triangle.size.height),

                                 CGPoint(x: -triangle.size.width,
                                 y: triangle.size.height / 2)])

 trianglePath.closeSubpath()
 triangle.physicsBody = SKPhysicsBody(polygonFrom: trianglePath)

Может кто-нибудь помочь мне разобраться, что я делаю не так?

Спасибо

1 Ответ

0 голосов
/ 02 мая 2018

Физические линии FYI зеленые, поэтому зеленый спрайт, вероятно, не лучший выбор, вы не можете видеть линии очень хорошо.

ваш спрайт имеет центр anchorPoint или anchorPoint (0, 0) по умолчанию. Поэтому ваши физические очки должны принимать это во внимание. верхний правый угол будет равным половине ширины от центра и половине высоты от центра и т. д. У вас полная ширина от центра и полная высота от центра, вот в чем проблема.

trianglePath.addLines(between: [CGPoint(x: triangle.size.width / 2, y: triangle.size.height / 2), CGPoint(x: triangle.size.width / 2, y: -triangle.size.height / 2), CGPoint(x: -triangle.size.width / 2, y: 0)])
...