Проведя дополнительные исследования файловой структуры Swift и изучив некоторые другие игры с похожей анимацией, я быстро обнаружил, что то, что я хотел, было невозможно. Я придумал другой метод, который похож, но не идентичен тому, что я хотел в моем вопросе.
Вот измененный код. Этот код очень модульный, и он должен работать для всех анимаций, которые мне нужны для воспроизведения.
import Foundation
import SpriteKit
class Character : SKNode {
let character: SKSpriteNode
let gender: String
let tone: String
var textureArray = [SKTexture]()
init(Tone: String, Gender: String) {
character = SKSpriteNode(texture: nil, size: CGSize(width: 45, height: 66))
gender = Gender
tone = Tone
super.init()
self.addChild(character)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func moveAnimation(direction: String) {
let textureAtlas = SKTextureAtlas(named: "\(gender)_\(tone)_\(direction)")
var frames:[SKTexture] = []
for index in 1 ... 6 {
let textureName = textureAtlas.textureNamed("\(gender)_\(tone)_\(direction)_\(index)")
let texture = textureName
frames.append(texture)
textureArray = frames
character.removeAllActions()
character.run(SKAction.repeatForever(SKAction.animate(with: textureArray, timePerFrame: 0.1)))
}
}
}
Я придумал формат именования папок (это в значительной степени совпадает с ответом @E. Coms, но есть пара отличий, и я придумал его ~ за 8 часов до него.), Который позволяет мне подключаться в любом направлении , пол и тон кожи с одной функцией. Формат идет \(gender)_\(tone)_\(direction)
, поэтому мои папки атласа названы:
Каждый из тонов кожи будет называться male_tan, male_dark
вместо male_pale
, чтобы атласы не перепутали друг с другом.
Когда я инициализирую нового персонажа, я выбираю оттенок кожи и пол. Когда я вызываю функцию анимации, я выбираю направление (back, backLeft, forward, etc.
)
Это почти то, что мне было нужно.