「喂?」山姆拿起对讲机,试着联络村子里的长老。
「我在这座黑森林里,找到很多水晶,这样不知道可以卖多少钱?」山姆期待着长老的回应。
长老想了一下,露出慈祥(?)的微笑。
「这些水晶,我 50 收!」
PS. 这里是开发 iOS 手机游戏的系列文,如果还没看过之前
剧情文章的朋友,欢迎先点这边回顾唷!
我们用程序码新增显示游戏总分的文字,放在游戏画面的最上方
scoreNode
,给它一个灰底颜色,宽度与萤幕同宽,高 30anchorPoint
为 CGPoint(x: 0, y: 0.5)
scoreNode
加到游戏场景里labelScore
,让他显示的文字为 Score: \(score)
,将标题与分数组合起来显示fontColor
:设定文字颜色fontSize
:设定文字大小fontName
:设定字体position
:设定位置horizontalAlignmentMode
:设定水平对齐方式verticalAlignmentMode
:设定垂直对齐方式labelScore
加到 scoreNode
里score
在 applySafeArea
方法里调整位置:
scoreNode
的高topSafeArea
跟自身一半的高 (因 anchorPoint y 为 0.5)class GameScene: SKScene {
...
var scoreNode: SKSpriteNode?
var labelScore: SKLabelNode?
var score: Int = 0
override func didMove(to view: SKView) {
...
self.scoreNode = SKSpriteNode(color: .darkGray, size: CGSize(width: CGFloat(self.size.width), height: CGFloat(30)))
self.labelScore = SKLabelNode(text: "Score: \(score)")
if let scoreNode = self.scoreNode, let labelScore = self.labelScore {
scoreNode.anchorPoint = CGPoint(x: 0, y: 0.5)
self.addChild(scoreNode)
labelScore.fontColor = UIColor.white
labelScore.fontSize = CGFloat(24)
labelScore.fontName = "Copperplate"
labelScore.position = CGPoint(x: 10, y: 0)
labelScore.horizontalAlignmentMode = .left
labelScore.verticalAlignmentMode = .center
scoreNode.addChild(labelScore)
}
}
func applySafeArea() {
...
// if let mapNode = self.mapNode {
// mapNode.position = CGPoint(x: 0, y: -self.topSafeArea)
// }
if let mapNode = self.mapNode, let scoreNode = self.scoreNode {
mapNode.position = CGPoint(x: 0, y: -self.topSafeArea - scoreNode.size.height)
scoreNode.position = CGPoint(x: 0 ,y: -self.topSafeArea - scoreNode.size.height/2)
}
}
}
先新增一个加分的方法 addScore(add: Int)
,改变 score
变数的值,也改变 labelScore
显示的文字
class GameScene: SKScene {
...
func addScore(add: Int) {
self.score += add
self.labelScore?.text = "Score: \(self.score)"
}
}
主角与水晶碰触时,加上水晶得分:10
class GameScene: SKScene {
...
override func update(_ currentTime: TimeInterval) {
for crystal in self.crystals where !crystal.isGotten && crystal.gridX == sam.gridX && crystal.gridY == sam.gridY {
...
self.addScore(add: 10)
}
}
}
主角与魔幻水晶碰触时,加上魔幻水晶得分:100
class GameScene: SKScene {
...
override func update(_ currentTime: TimeInterval) {
for magicCrystal in self.magicCrystals where !magicCrystal.isGotten && magicCrystal.gridX == sam.gridX && magicCrystal.gridY == sam.gridY {
...
self.addScore(add: 100)
}
}
}
主角与香菇碰触时,加上香菇得分:200
class GameScene: SKScene {
...
override func update(_ currentTime: TimeInterval) {
for mushroom in self.mushrooms where !mushroom.isGotten && mushroom.gridX == sam.gridX && mushroom.gridY == sam.gridY {
...
self.addScore(add: 200)
}
}
}
主角与怪物碰触,且怪物模式为逃逸时,加上击退得分:50
class GameScene: SKScene {
...
override func update(_ currentTime: TimeInterval) {
for weather in self.weathers where (weather.gridX == sam.gridX && abs(weather.node.position.y - sam.node.position.y) <= CGFloat(self.gridWH + 6) || weather.gridY == sam.gridY && abs(weather.node.position.x - sam.node.position.x) <= CGFloat(self.gridWH + 6)) && (gridMapping.purpleTree.x != sam.gridX && gridMapping.purpleTree.y != sam.gridY)
{
if weather.mode == .ATTACK || weather.mode == .PLAY {
...
} else if weather.mode == .ESCAPE {
...
self.addScore(add: 50)
}
}
}
}
成功将分数累积在画面上方罗!
目前我们已经可以计算得分罗~但是...
累积的得分在关闭游戏後,就会重置了,辛苦得来的分数就这样飞了
还缺少将最高得分纪录起来的功能!
游戏要能破纪录,才会更有挑战性~
明日会教大家如何将最高得分纪录在本机里。
最近补课的模式有了改变,大部分时间都是诗忆读着讲义,遇到问题或是想要学得更深入的时候再和唯心讨论。 ...
其实这个系列参赛 主要是希望自己可以平日做便当、假日吃好料 但工作太忙了 还需要多一点时间调整 所以...
前言 延续着上篇的介绍,这篇要来介绍visualVM的Sampler页签 Sampler 这边我延续...
注:发文日和截图的日期不一定是同一天,所以价格计算上和当日不同,是很正常的。 声明:这一系列文章并无...
上一篇我们的基因体时代-AI, Data和生物资讯 Day16- 视觉浏览定序档案格式SAM, BA...