您的当前位置:首页正文

评分系统-能够计算游戏中的抽象数量

来源:华拓网

在本节中,我们将实施评分系统。此功能将允许我们收集珠宝并将计数器的数量增加1.当满足一定数量时,我们会将我们的玩家发送到下一级别。

下载评分系统

变量

让我们声明变量。在度量Measure之后 ,为Score添加新注释。然后,声明scoreLabel和** score**。

// Score
let scoreLabel = SKLabelNode()
var score = 0

设置分数标签 scoreLabel

didMove函数中,初始化位置,字体颜色,大小,字体和标签的对齐方式。然后,将节点添加到摄像机。

scoreLabel.position = CGPoint(x: (cameraNode?.position.x)! + 310, y: 140)
scoreLabel.fontColor = #colorLiteral(red: 0.9529411793, green: 0.6862745285, blue: 0.1333333403, alpha: 1)
scoreLabel.fontSize = 24
scoreLabel.fontName = "AvenirNext-Bold"
scoreLabel.horizontalAlignmentMode = .right
scoreLabel.text = String(score)
cameraNode?.addChild(scoreLabel)

分数函数

现在我们有标签集,我们需要一个函数来增加数量。在操作标记中,声明一个新函数并将其命名为:rewardTouch。在函数内部,让我们将得分+1并调用得分。

func rewardTouch() {
    score += 1
    scoreLabel.text = String(score)
}

分数限制

类似于玩家和陷阱之间的碰撞,当玩家触摸珠宝时,存在多个接触并且得分将增加超过一个的量。我们需要将碰撞限制在一个,所以每次玩家接触到宝石时,每个宝石的分数都会增加一个。在布尔分区中,声明一个变量并将其命名为:rewardIsNotTouched。

var rewardIsNotTouched = true

Game Loop部分中,将此新变量设置为true。

奖励的碰撞

碰撞标记中,在玩家和奖励之间添加新的碰撞匹配。声明if语句,如果节点名为jewelrewardIsNotTouched为true,则插入rewardTouch函数。将rewardIsNotTouched设置为false。

if collision.matches(.player, .reward) {

    if contact.bodyA.node?.name == "jewel" {
        contact.bodyA.node?.physicsBody?.categoryBitMask = 0
        contact.bodyA.node?.removeFromParent()
    }
    else if contact.bodyB.node?.name == "jewel" {
        contact.bodyB.node?.physicsBody?.categoryBitMask = 0
    }

    if rewardIsNotTouched {
        rewardTouch()
        rewardIsNotTouched = false
    }
}

珠宝的掩码

GameScene.sks中,移动玩家前面的宝石并更换其掩码。

宝石:

  • 分类掩码:4
  • 碰撞掩码:2
  • 字段掩码:默认
  • 接触掩码:2

运行模拟器,将玩家移动到宝石上,您将看到评分系统正常工作!

移除宝石

你可能已经注意到宝石仍在那里,即使它被触摸了。我们需要调用removeFromParent方法。在玩家和宝石之间的碰撞中,调用if语句中的方法。您需要尝试这两种情况之一并运行模拟器。当玩家触摸珠宝时,宝石将消失,而不是玩家。

BodyA-BodyB.jpg

结论

在本节中,我们学习了如何实施评分系统。您可以将此系统用于多个可数的功能,例如:健康,法力,经验,货币,积分......