Добавление нескольких одинаковых SKSpriteNode () в Swift 4.0 - PullRequest
0 голосов
/ 24 апреля 2019

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

У меня есть SKPhysicsContact, который запускает следующий код, когда 2 объекта вступают в контакт:

let ball = SKSpriteNode(imageNamed: "circle")
            ball.position = CGPoint(x: self.frame.size.width / 3, y: self.frame.size.height / 3)
            ball.size = CGSize(width: ballSize * 2, height: ballSize * 2)
            ball.physicsBody = SKPhysicsBody(circleOfRadius: ballSize)
            ball.physicsBody?.affectedByGravity = false
            ball.physicsBody?.isDynamic = true
            ball.physicsBody?.restitution = 1
            ball.physicsBody?.linearDamping =  0
            ball.physicsBody?.friction = 0
            ball.zPosition = 2
            ball.physicsBody?.categoryBitMask = PhysicsCategoryBall
            ball.physicsBody?.contactTestBitMask = PhysicsCategoryAll
            ball.physicsBody?.collisionBitMask = PhysicsCategoryWall
            ball.run(colorBlack)
            self.addChild(ball)

При первом запуске кода SKPhysicsContact создается SKSpriteNode «шарик». Очевидно, что во второй раз, когда SKPhysicsContact запускается, игра вылетает, потому что пытается снова добавить «ball», когда «ball» уже существует.

Без removeFromParent() на шаре перед добавлением другого шара, как мне создать простой функционал / способ создания одного и того же SKSpriteNode "шара" снова и снова каждый раз, когда я запускаю свой SKPhysicsContact?

Приветствия:)

1 Ответ

0 голосов
/ 24 апреля 2019

Вы не должны создавать узел при контакте; вместо этого сделайте это где-нибудь еще (при инициализации всех сущностей или чего-то подобного). Вы пытались сделать из него глубокую копию, а затем использовать ее? * 1001 например *

   let spriteCopy = spriteNode.copy() as SKSpriteNode

Для получения дополнительной информации, посмотрите Как дублировать спрайт в наборе спрайтов и как они ведут себя по-разному

...