2016-04-08 4 views
1

Я новичок в языке Swift, и я следую учебнику, в котором используется устаревший быстрый язык. Учебное пособие посвящено созданию анимации с файлами png. Таким образом, есть 6 файлов png, которые в совокупности создают анимацию. Это ссылка учебника «https://www.youtube.com/watch?v=5aCVyrJbrHQ». Я заметил ключевое различие в старой версии Swift и новой. Вот где я застрял.Анимация не работает в Swift 2.2

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
    let shooterNode = self.childNodeWithName("shooterNode") 

    if(shooterNode != nil) { 
     let animation = SKAction.animateWithTextures(shooterAnimation, timePerFrame: 0.1) 
     shooterNode?.runAction(animation) 
    } 

Новые версии: переопределение FUNC touchesBegan (штрихи: Set, withEvent событие: UIEvent

Старая версия: переопределение FUNC touchesBegan (штрихами: NSSet, withEvent событие: UIEvent

Ошибка

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

Это полный код всего файла в случае, если вы попросите его

import UIKit 
import SpriteKit 

class ShooterScene: SKScene { 

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

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

    func initShooterScene(){ 
     let shooterAtlas = SKTextureAtlas(named: "shooter") 

     for index in 1...shooterAtlas.textureNames.count { 
      let imgName = String(format: "shooter%01d", index) 
      shooterAnimation += [shooterAtlas.textureNamed(imgName)] 

     } 
    } 
     //Anime the shooter 
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
     let shooterNode = self.childNodeWithName("shooterNode") 

     if(shooterNode != nil) { 
      let animation = SKAction.animateWithTextures(shooterAnimation, timePerFrame: 0.1) 
      shooterNode?.runAction(animation) 
     } 
    } 
} 

GameSwift.scene

import SpriteKit 

class GameScene: SKScene { 
    override func didMoveToView(view: SKView) { 


    } 

    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) { 
     let introLabel = childNodeWithName("introLabel") 

     if(introLabel != nil) { 
      let fadeOut = SKAction.fadeOutWithDuration(1.5) 

      introLabel?.runAction(fadeOut, completion: { 
       let doors = SKTransition.doorwayWithDuration(1.5) 
       let shooterScene = SKScene(fileNamed: "ShooterScene") 
       self.view?.presentScene(shooterScene!, transition: doors) 

      }) 

     } 
    } 

    /* Called before each frame is rendered */ 
    override func update(currentTime: CFTimeInterval) { 
      } 
} 
+0

Вы проверили, были ли все методы выполнены как следует. Поместите некоторые инструкции печати в каждый метод и выясните, правильно ли вызывается все. Это было бы началом. Также поставьте оператор печати внутри блока if if (shooterNode! = Nil) {...} '. – Whirlwind

+0

@Whirlwind Спасибо за ответ, я добавил печать на каждую функцию в файле, и ничего не появилось в консоли. Поэтому я пришел к выводу, что есть что-то в связи с моим файлом ShooterScene.sks и ShooterScene.swift. –

+0

Где Вы можете найти "ShooterScene"? Фактическое создание новой сцены (и ее перехода) должно выглядеть так: if let nextScene = ShooterScene (fileNamed: «ShooterScene») {/ * здесь сцена здесь с необязательным переходом * /} 'Так что проверьте эту часть. – Whirlwind

ответ

2

Оно должно быть:

let shooterScene = ShooterScene(fileNamed: "ShooterScene") 

, а не :

let shooterScene = SKScene(fileNamed: "ShooterScene") 
+0

Большое спасибо! Кто-то в комментарии очень вводил в заблуждение относительно этой строки кода :(Но спасибо bro! –

+1

@CecilBoye Нет проблем :) Это обычная ошибка на самом деле. – Whirlwind

Смежные вопросы