在Spritekit这个2d游戏框架中,基本常用到的很多元素都是精灵,游戏人物,背景都是精灵,那我们触摸点击了屏幕上的多个精灵中的一个,在程序中如何分辨点击的是哪个精灵?这就需要用到SKSpriteNode实例的name属性
首先我们第一步给游戏添加一个精灵,用一张图片显示游戏人物,然后设置它的name属性为child
override func didMoveToView(view: SKView) {
let player = SKSpriteNode(imageNamed: "player")
player.name = "child"
player.position = CGPoint(x: size.width/2, y: size.height/2)
addChild(player)
}
这样,我们在游戏中就有一个name = “child”的精灵
然后我们在触摸监控方法中判断当前触摸的精灵的name
override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
/* Called when a touch begins */
for touch in (touches ) {
let location = touch.locationInNode(self)
if let sp = nodeAtPoint(location) as? SKSpriteNode{
if sp.name == "child" {
print("触摸到了这个名字叫child的精灵")
}
}
}
}
只需通过if来判断当前触摸精灵的name就可以了,当然,最好每个精灵name都不同,如果你要处理一类精灵,例如飞机发射的子弹,那产生的所有精灵的name属性都可以设置为bullet,这样可以管理一类相同作用的精灵。当然,也可以用switch case来判断name,swift中的switch case还是很强大的。