我们有一个主游戏场景SKScene
,它拥有HUD逻辑和分数。
对于一个对象,我们还有一个SKSpriteNode
的子类。当点击对象时,我们处理SKSpriteNode
子类中的触摸。
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
我们想要做的是在点击游戏时更新游戏内的分数。如何实现这一目标?
答案 0 :(得分:0)
我认为
GameScene
有一个名为SKLabelNode
"scoreLabel"
"scoreLabel"
显示游戏的当前得分SKSpriteNode
"mySprite"
"mySprite"
收到点击时,得分必须增加1 var score = 0
这是你应该如何实现touchesBegan:withEvent
class GameScene: SKScene {
private var score = 0
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
if
let touch = touches.first as? UITouch,
let tappedSprite = nodeAtPoint(touch.locationInNode(self)) as? SKSpriteNode,
let scoreLabel = childNodeWithName("scoreLabel") as? SKLabelNode
where tappedSprite.name == "mySprite" {
score += 1
scoreLabel.text = "Score: \(score)"
}
}
}
<强>解释强>
第一个条件选择第一个接收到的触摸。如果触摸至少有触摸,这将成功。 (理论上,这条线永远不会失败。)
第二个条件会检索包含触摸点的SKNode
,然后尝试将此节点强制转换为SKSpriteNode
。
第三个条件尝试检索名为SKLabelNode
的{{1}}。
检查所检测的精灵的名称为"scoreLabel"
。
如果这4个条件成功,则私有财产分数增加1,标签文本更新。
希望这有帮助。