Swift 3 (SpriteKit): выравнивание SKPhysicsBody в SKShapeNode
Я создаю SKShapeNodes в моей программе, используя это:
let points = [CGPoint(x: x, y: y), CGPoint(x: x2, y: y2)]
let line = SKShapeNode(points: &points, count: points.count)
Проблема, с которой я сталкиваюсь, заключается в том, что всякий раз, когда я добавляю в текст PhysBody, физика не выравнивается с линией. Я понимаю, что проблема заключается в том, что позиция линии всегда CGPoint(x: 0, y: 0), поэтому physBody всегда находится в центре экрана, независимо от того, где линия. Вот мой код для создания физики тела:
line.physicsBody = SKPhysicsBody(rectangleOf: (line.frame.size))
Если кто-нибудь знает, как вывести физическую телу на линию, ответьте, пожалуйста, на ваше решение. Спасибо!
1 ответ
Если вы хотите сделать физическое тело из одной точки в другую, вы можете использовать что-то вроде этого:
class GameScene:SKScene {
override func didMove(to view: SKView) {
var points = [CGPoint(x: 22, y: 22), CGPoint(x: 155, y: 155)]
let line = SKShapeNode(points: &points, count: points.count)
print(line.frame.size)
line.physicsBody = SKPhysicsBody(edgeFrom: points[0], to: points[1])
addChild(line)
}
}
Это создаст основанное на ребре физическое тело, используя две точки. Физика ребер по умолчанию является статической, так что имейте это в виду. Чтобы зарегистрировать контакт (или сделать столкновение с этим телом), другое тело должно быть динамическим.
Если вы хотите, чтобы это тело было динамичным, ищите инициализаторы на основе тома.