我想在我的SKScene类中搜索以“spaceship”开头的childNodes。基本上我有几个名为“spaceship1”,“spaceship2”,“spaceship3”等的太空船节点......
但是我没有正确的语法。这样:
self.subscript("spaceship[0-9]")
结果:
Expected ',' separator
而且:
self.objectForKeyedSubscript("spaceship[0-9]")
结果:
'objectForKeyedSubscript' is unavailable: use subscripting
答案 0 :(得分:2)
除了分配"spaceship" + counter
等标签外,还有一个更好的解决方法。
是的,出于多种原因,您应该创建一个Spaceship
类,如此
class Spaceship: SKSpriteNode {
init() {
let texture = SKTexture(imageNamed: "spaceship")
super.init(texture: texture, color: .clearColor(), size: texture.size())
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
class GameScene:SKScene {
var spaceships: [Spaceship] {
return self.children.flatMap { $0 as? Spaceship }
}
}
有几个原因
答案 1 :(得分:1)
这是在Swift中使用Strings的一个非常方便的参考。 http://useyourloaf.com/blog/swift-string-cheat-sheet/
根据该网站
let spaceshipString = "spaceship1"
spaceshipString.hasPrefix("spaceship") // true
spaceshipString.hasSuffix("1") // true
考虑到这一点,您可以通过以下方式枚举所有节点以找到具有太空飞船的节点。
func findSpaceShipNodes() {
self.enumerateChildNodesWithName("//*") {
node, stop in
if (( node.name?.hasSuffix("spaceship") ) != nil) {
// Code for these nodes in here //
}
}
}