调用子节点:
如果您已将您的添加sprite
到SKScene
,您将可以稍后调用它以供使用。
self.addChild(sprite)
如果你想用另一种方法调用它,你可以使用这个:
let sprite = self.childNodeWithName("BlueSpuare1") as? SKSpriteNode
注意使用强制转换SKNode
为SKSpriteNode
. 您只需要在访问 SKSpriteNode 独有的属性(即texture
或colorBlendFactor
)时执行此操作。这意味着使用该SKAction.moveTo
方法可以在 a 上使用SKNode
并且不需要强制转换。
如何移动精灵:
import SpriteKit
class GameScene: SKScene {
func didMove(to: SKView) {
let sprite = SKSpriteNode(imageNamed:"BlueSquare")
sprite.name = "BlueSquare1"
addChild(sprite)
moveSquare("BlueSquare1") // Place this line anywhere you want it called
}
func moveSquare(_ square: String) {
let moveTo: CGPoint = // to position
let time: Double = // duration
childNode(withName: square).moveTo(moveTo, duration: time)
}
}
最后提示:
- 请注意,调用孩子的名字不是递归的。斯威夫特不会调查孙辈的名字等。
- 如果 2 个子节点具有相同的名称,Swift 会在数组中找到第一个节点,
children
就像你写的一样:self.children.first { $0.name == "BlueSquare1" }
- 如果你不给你的节点一个名字,它的默认值是
nil
. 这意味着它永远不能使用childNode(withName: String)
. 相反,使用self.children.first { $0.name == nil }
.