用Swift做个游戏Lecture07 —— 老板,来块记分牌!
Lecture06课时完毕,我们已经初步完成游戏的主体,可惜却没有一个衡量得分的标准。类似FlappyBird游戏,当然是谁通过的障碍物越多,就越牛逼。不如我们设定如下规则:
当前任务主要分为:
01.显示分数牌像Flappy Bird的小游戏,我们不妨仅用SKLabelNode来显示分数,就类似平常我们所用的UILabel。请在 enum Layer: CGFloat {
case Background
case Obstacle
case Foreground
case Player
case UI //新内容
}
类似早前setupBackground(),setupForeground()那样,我们依葫芦画瓢设置记分牌,请添加一个方法,如下: func setupLabel() {
scoreLabel = SKLabelNode(fontNamed: "AmericanTypewriter-Bold")
scoreLabel.fontColor = SKColor(red: 101.0/255.0,green: 71.0/255.0,blue: 73.0/255.0,alpha: 1.0)
scoreLabel.position = CGPoint(x: size.width/2,y: size.height - 20)
scoreLabel.text = "0"
scoreLabel.verticalAlignmentMode = .Top
scoreLabel.zPosition = Layer.UI.rawValue
worldNode.addChild(scoreLabel)
}
注意到在设置字体名字为 现在 func setupLabel() {
scoreLabel = SKLabelNode(fontNamed: kFontName)//改动1
scoreLabel.fontColor = SKColor(red: 101.0/255.0,alpha: 1.0)
scoreLabel.position = CGPoint(x: size.width/2,y: size.height - kMargin)//改动2
scoreLabel.text = "0"
scoreLabel.verticalAlignmentMode = .Top
scoreLabel.zPosition = Layer.UI.rawValue
worldNode.addChild(scoreLabel)
}
点击运行,不出意外屏幕正中间靠上已经显示一个大大的”0”,可惜无论你经过多少个障碍物,还是鸭蛋,那是因为还未实现计分功能。 02.实现计分思路:
图中的设置了障碍物的标志位:[“Passed”]或者[]两种。那么问题来了,哪里存储这些标志位呢?答案是Sprite中的 //...
sprite.userData = NSMutableDictionary()
//...
注意到一开始 理解完这些,开始构思咱们的 func updateScore() {
worldNode.enumerateChildNodesWithName("BottomObstacle",usingBlock: { node,stop in
if let obstacle = node as? SKSpriteNode {
if let passed = obstacle.userData?["Passed"] as? NSNumber {
if passed.boolValue {
return
}
}
if self.player.position.x > obstacle.position.x + obstacle.size.width/2 {
self.score++
self.scoreLabel.text = "(self.score)"
self.runAction(self.coinAction)
obstacle.userData?["Passed"] = NSNumber(bool: true)
}
}
})
}
讲解:
请将updateScore()添加到update()方法中.Play情况最下方。 点击运行,通过障碍物得分!!! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |