Работа с SKSpriteNodes и текстурами

#ios #swift #xcode #sprite-kit

#iOS #swift #xcode #sprite-kit

Вопрос:

Я пытаюсь запрограммировать функцию, которая позволяет пользователю изменять «Призрак» на другое изображение.

Вот мой код:

     Ghost = SKSpriteNode(imageNamed: "Ghost17")
    Ghost.size = CGSize(width: 50, height: 50)
    Ghost.position = CGPoint(x: self.frame.width / 2 - Ghost.frame.width, y: self.frame.height / 2)
    Ghost.physicsBody = SKPhysicsBody(circleOfRadius: Ghost.frame.height / 1.4)
    Ghost.physicsBody?.categoryBitMask = PhysicsCatagory.Ghost
    Ghost.physicsBody?.collisionBitMask = PhysicsCatagory.Ground | PhysicsCatagory.Wall
    Ghost.physicsBody?.contactTestBitMask = PhysicsCatagory.Ground | PhysicsCatagory.Wall | PhysicsCatagory.Score
    Ghost.physicsBody?.affectedByGravity = false
    Ghost.physicsBody?.isDynamic = true
    Ghost.zPosition = 2

    if defaults1.integer(forKey: "Sphere") == 2 {
        Ghost = SKSpriteNode(imageNamed: "Ghost13")
    }
    if defaults1.integer(forKey: "Sphere") == nil! {
        Ghost = SKSpriteNode(imageNamed: "Ghost2")
    }

    self.addChild(Ghost)
  

Я использую UserDefaults для отправки информации между viewContollers.

Когда я нажимаю на кнопку, которая устанавливает defaults1 на 2, появляется новое изображение, но оно ведет себя не так, как должно. Я не уверен, как это исправить, если вам нужна дополнительная информация, пожалуйста, спросите.

Ответ №1:

При изменении текстуры попробуйте использовать это:

 Ghost.texture = SKTexture(imageNamed: "Ghost13")
  

Вместо:

 Ghost = SKSpriteNode(imageNamed: "Ghost13")
  

Это только изменяет свойство текстуры узла, а не повторно инициализирует его. Возможно, вы сталкиваетесь с проблемами, потому что вы сбрасываете узел при его повторной инициализации.

Надеюсь, это поможет!