SKSpriteNode не появится, когда его физическое тело будет динамичным - PullRequest
0 голосов
/ 17 февраля 2020

SKSprite появится только на сцене, если .isDynamic = false в противном случае он не появится. Хотя он не отображается, кажется, что он связывается с другими узлами сцены.

Я попытался поиграться со значениями x и y узла "lemming", но это все равно приводит к тому, что он не появляется.

Вопрос:

Что мне нужно добавить или удалить, чтобы узел «лемминга» подвергался воздействию силы тяжести, появляясь в сцене и правильно связаться с узлом "cliff"?

В файле GameScene.swift:

//MARK: - Nodes
    var background = SKSpriteNode()
    var cliff = SKTexture()
    var lemming = SKSpriteNode()

    //MARK: -Catergories
    let lemmingCatergory : UInt32 = 0x1 << 1
    let cliffCatergory   : UInt32 = 0x1 << 2

    //MARK: - Start of game functions
    override func didMove(to view: SKView) {
        backgroundColor = UIColor.green
        scaleMode = .aspectFit
        size = UIScreen.main.bounds.size
        physicsWorld.gravity = CGVector(dx: 0, dy: -9.81)
        physicsWorld.contactDelegate = self
        addBackground()
        addCliff()
        addLemming()
        view.showsPhysics = true
    }

    //MARK: -Node customization
    private func addBackground() {
        background = SKSpriteNode(imageNamed: "background")
        background.name = "Background"
        background.position = CGPoint(x: frame.midX, y: frame.midY)
        background.size = UIScreen.main.bounds.size
        background.physicsBody = SKPhysicsBody(rectangleOf: background.frame.size)
        background.physicsBody?.isDynamic = false
        background.physicsBody?.affectedByGravity = false
        addChild(background)
    }

    private func addCliff() {
        var cliffNode : SKSpriteNode!
        cliff = SKTexture(imageNamed: "cliff")
        cliffNode = SKSpriteNode(texture: cliff)
        cliffNode.name = "Cliff"
        cliffNode.position = CGPoint(x: frame.midX, y: frame.midY)
        cliffNode.size = UIScreen.main.bounds.size
        cliffNode.physicsBody = SKPhysicsBody(texture: cliff, size: cliff.size())
        cliffNode.physicsBody!.categoryBitMask = cliffCatergory
        cliffNode.physicsBody!.collisionBitMask = lemmingCatergory
        cliffNode.physicsBody!.contactTestBitMask = lemmingCatergory
        cliffNode.physicsBody?.isDynamic = true
        cliffNode.physicsBody?.affectedByGravity = false
        cliffNode.physicsBody?.pinned = true
        cliffNode.physicsBody?.allowsRotation = false
        addChild(cliffNode)
    }

    private func addLemming() {
        lemming = SKSpriteNode(imageNamed: "lemming")
        lemming.size = CGSize(width: lemming.size.width / 15, height: lemming.size.height / 15)
        lemming.position = CGPoint(x: 0.5, y: 0)
        lemming.physicsBody = SKPhysicsBody(rectangleOf: lemming.frame.size)
        lemming.physicsBody!.categoryBitMask = lemmingCatergory
        lemming.physicsBody!.collisionBitMask = cliffCatergory
        lemming.physicsBody!.contactTestBitMask = cliffCatergory
        lemming.physicsBody?.isDynamic = true
        lemming.physicsBody?.affectedByGravity = true
        addChild(lemming)
    }

    func didBegin(_ contact: SKPhysicsContact) {
        print("Body A: \(String(describing: contact.bodyA.node!.name))")
        print("Body B: \(String(describing: contact.bodyB.node!.name))")
    }
...