Я новичок в языке 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) {
}
}
Вы проверили, были ли все методы выполнены как следует. Поместите некоторые инструкции печати в каждый метод и выясните, правильно ли вызывается все. Это было бы началом. Также поставьте оператор печати внутри блока if if (shooterNode! = Nil) {...} '. – Whirlwind
@Whirlwind Спасибо за ответ, я добавил печать на каждую функцию в файле, и ничего не появилось в консоли. Поэтому я пришел к выводу, что есть что-то в связи с моим файлом ShooterScene.sks и ShooterScene.swift. –
Где Вы можете найти "ShooterScene"? Фактическое создание новой сцены (и ее перехода) должно выглядеть так: if let nextScene = ShooterScene (fileNamed: «ShooterScene») {/ * здесь сцена здесь с необязательным переходом * /} 'Так что проверьте эту часть. – Whirlwind