2016-12-17 15 views
3

Я создаю SKShapeNodes в моей программе с помощью этого:Swift 3 (SpriteKit): Выравнивание SKPhysicsBody к SKShapeNode

let points = [CGPoint(x: x, y: y), CGPoint(x: x2, y: y2)] 
let line = SKShapeNode(points: &points, count: points.count) 

Проблема, которую я имею в том, что всякий раз, когда я добавить physicsBody к линии, physicsBody является не выравнивается с линией. Я понимаю, что проблема в том, что позиция линии всегда CGPoint (x: 0, y: 0), поэтому физическое устройство всегда находится в центре экрана независимо от того, где находится линия. Вот мой код для создания physicsBody:

line.physicsBody = SKPhysicsBody(rectangleOf: (line.frame.size)) 

Если кто-нибудь знает, как выровнять physicsBody к линии, то пожалуйста, ответьте с вашим решением. Благодаря!

+0

Есть несколько способов исправить это, используя другие инициализаторы. Тем не менее, сначала немного отлаживаем ваш пример. Что говорит print ('line.frame.size')? Можете ли вы изменить свой вопрос и значения жесткого кода обоих CGPoints? (координаты x и y)? – Whirlwind

ответ

3

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

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) 
    } 
} 

Это создаст на основе тела физики края с помощью двух точек. Тело физики края по умолчанию статично, поэтому имейте это в виду. Чтобы зарегистрировать контакт (или сделать столкновение с этим телом), другое тело должно быть динамическим.

Если вы хотите иметь это динамическое тело, тогда ищите volume based initializers.

+0

Спасибо, что работает отлично! Является ли настройка affectedByGravity ложной, потому что я не использую ее, и она работает хорошо? –

+0

@ J.Treutlein Я просто сделал это, так что линия остается на экране :) Конечно, вы можете удалить ее, если хотите, чтобы ваши линии падали (из-за силы тяжести). – Whirlwind

+0

Спасибо! Я просто проверял :) –