skLabelNodes有时只能工作

时间:2017-05-22 21:10:25

标签: swift sprite-kit sklabelnode

所以我在我的代码中添加了两个标签节点,并希望在显示另一个时隐藏一个,然后在游戏开始时反之亦然。

class GameScene: SKScene {
    // Declarations
    let startLabel:SKLabelNode = SKLabelNode()
    let scoreLabel:SKLabelNode = SKLabelNode()
    var score = 0

    override func didMoveToView(view: SKView) {
        // Properties
        startLabel.fontSize = 20
        startLabel.fontColor = UIColor.blackColor()
        startLabel.position = CGPointMake(self.frame.width*0.5, self.frame.height*0.5)
        startLabel.text = "Touch Paddle To Begin"
        startLabel.hidden = false
        self.addChild(startLabel)

        scoreLabel.fontSize = 20
        scoreLabel.fontColor = UIColor.blackColor()
        scoreLabel.position = CGPointMake(self.frame.width*0.5, self.frame.height*0.75)
        scoreLabel.text = "\(score)"
        scoreLabel.hidden = true
        self.addChild(scoreLabel)

然后,当触摸Paddle时,启动moveBall()函数并开始游戏。这是我交换标签的地方。

func moveBall() {

    // Setting Labels
    self.startLabel.hidden = true
    self.scoreLabel.hidden = false

    // Starting game
    self.ball.physicsBody?.dynamic = true

但是,它有时只能起作用。它会完美地工作,然后在不改变任何东西的情况下我会再次运行它,只会显示一个标签。然后再次显示另一个标签,或者startLabel仅显示一帧然后消失。

免责声明:我真的不知道如何编码,只是想知道一个游戏,并试图让它成为现实。如果解决方案很简单,请道歉。对我的代码的任何建议将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:0)

根据给出的信息,它应该正常工作。但是你应该在touchesBegan方法中调用moveBall()。不是更新方法。

此外,如果您希望在用户触摸labelNode时调用它,则使用触摸位置开始。 (但我宁愿使用精灵而不是标签因为标签有点反应迟钝,因为有时手指不会碰到标签。

所以用正确的方法调用moveBall()。提供更多信息以提供更准确的答案。