Попытка получить кучу изображений для последовательного отображения при касании экрана в Swift - PullRequest
1 голос
/ 22 января 2020

Я помещаю различные изображения для последовательного отображения в папку assets.xcassets в виде shooter, shooter1, shooter2 и т. Д., Но всякий раз, когда я касаюсь экрана, анимация / изображение, отображаемое в представлении, не изменяется?

Вот мой код:

 import UIKit
 import SpriteKit

 class ShooterScene: SKScene
 {

     var score = 0
     var enemyCount = 10
     var shooterAnimation = [SKTexture]()

     override func didMove(to view: SKView)
     {
         self.initShooterScene()
     }

     func initShooterScene()
     {
         let shooterAtlas = SKTextureAtlas(named: "shooter") // referencing shooter.atlas
         for index in 1...shooterAtlas.textureNames.count
         {
             let imgName = "shooter\(index)"
             shooterAnimation += [shooterAtlas.textureNamed(imgName)]
         }
     }

     //Animate the shooter

     override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
         if let shooterNode  = self.childNode(withName: "shooterNode") as? SKSpriteNode
         {
             let animation = SKAction.animate(with: shooterAnimation, timePerFrame: 0.1)
             shooterNode.run(animation)
         }
      }



  }

Узел спрайта, который я использую в представлении, имеет имя shooterNode, но изображение, похоже, не меняется вообще. Будет полезна любая помощь 2020-01-23 17: 47: 59.715838-0500 Урок 31 - Введение в Sprike Kit [5666: 203542] SKView: ignoreRenderSyncInLayoutSubviews - НЕТ. Вызов _renderSynchronouslyForTime без обработчика 2020-01-23 17: 48: 11.764763-0500 Учебное пособие 31 - Введение в Sprike Kit [5666: 203964] Соединение XP C прервано 2020-01-23 17: 48: 11.765810-0500 Учебное пособие 31 - Введение к Sprike Kit [5666: 203968] [соединение] Соединение прервано: попытка переподключения 2020-01-23 17: 48: 11.765887-0500 Учебное пособие 31 - Введение в Sprike Kit [5666: 205206] [ServicesDaemonManager] вызывается interruptHandler. - [FontServicesDaemonManager connection] _block_invoke Сообщение от отладчика: прекращено из-за сигнала 15

1 Ответ

0 голосов
/ 25 января 2020

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

class ShooterScene: SKScene {

    var textures = [SKTexture]()

    //Also serves as the name of the texture the node uses.
    let NODE_NAME:String = "shooter"

    override init(size: CGSize) {
        super.init(size: size)
        //Better the setup scene in intializer, because didMove(to view) is called multiple times.
        //You only want to call the setup method once.
        self.setup()
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }


    func setup() {

       //Node setup
       let shooterNode = SKSpriteNode(imageNamed: NODE_NAME)
       shooterNode.position = CGPoint(x: self.frame.midX, y: self.frame.midY)
       shooterNode.name = NODE_NAME
       addChild(shooterNode)

       //Create animation collection
       let atlas = SKTextureAtlas(named: NODE_NAME)
        //Arrays start at index zero so we need to subtract 1 from the total textures count
        let upperBound = atlas.textureNames.count - 1
        for index in 1...upperBound {
            let textureName = "\(NODE_NAME)\(index)"
            textures += [atlas.textureNamed(textureName)]
        }
    }

    //Animate the shooter when screen pressed.
    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {

        guard let shooterNode = self.childNode(withName: NODE_NAME) as? SKSpriteNode else { return }
        //For animations that are around 60 Frames per second
        let FPS:Double = 1/60
        let animation = SKAction.animate(with: self.textures, timePerFrame: FPS)
        shooterNode.run(animation)
    }



 }
...