让Spritekit显示存储在Variable中的Integer

时间:2015-09-23 20:37:08

标签: ios swift sprite-kit

所以我在尝试做一些应该很容易的事情时遇到了困难,显然我没有看到什么是错的。 这是代码:

import SpriteKit
var money = "0"
class GameScene: SKScene {
override func didMoveToView(view: SKView) {
    /* Setup your scene here */

    let moneyLabel = SKLabelNode(fontNamed:"Times New Roman")
    moneyLabel.text = money;
    moneyLabel.fontSize = 14;
    moneyLabel.position = CGPoint(x:CGRectGetMidX(self.frame), y:CGRectGetMidY(self.frame));
    self.addChild(moneyLabel)

}

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
   /* Called when a touch begins */

    for touch in touches {

        money + 1
    }
}

override func update(currentTime: CFTimeInterval) {
    /* Called before each frame is rendered */
}

}

这假设要做的是标签显示变量,当用户触摸屏幕时,变量变化1,每按一次就增加1。 Label应该随变量而变化。 我如何使这项工作?

2 个答案:

答案 0 :(得分:2)

问题

您只是将1添加到money

money + 1

此代码:

  1. 不会更改money属性
  2. 不会更改您moneyLabel
  3. 中的文字
  4. 是非法的,因为您无法对StringInt
  5. 求和

    解决方案

    此代码应该完成工作

    import SpriteKit
    
    class GameScene: SKScene {
        private var money = 0 {
            didSet {
                self.moneyLabel?.text = money.description
            }
        }
        private var moneyLabel : SKLabelNode?
    
        override func didMoveToView(view: SKView) {         
            let moneyLabel = SKLabelNode(fontNamed:"Times New Roman")
            moneyLabel.text = money.description
            moneyLabel.fontSize = 14
            moneyLabel.position = CGPoint(x:CGRectGetMidX(self.frame), y:CGRectGetMidY(self.frame))
            self.addChild(moneyLabel)
            self.moneyLabel = moneyLabel
        }
    
        override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
            money += touches.count
        }
    }
    

    1)

    正如您所见,我向money属性添加了一个观察者(顺便说一句,我将其设为Int属性,而不是代码中的String!)。

    didSet {
        self.moneyLabel?.text = money.description
    }
    

    感谢观察者,每次资金变更时,都会检索moneyLabel节点并更新文本。

    2)

    didMoveToView结束时,我将moneyLabel保存到实例属性

    self.moneyLabel = moneyLabel
    

    所以我可以轻松检索(我们在前一点已经看过)

    3)

    最后在touchesBegan我只是按接收的触摸次数增加money属性。

    money += touches.count
    

    感谢观察者,对money属性的每次更改都会触发更新到moneyLabel节点内的文本。

    希望这有帮助。

答案 1 :(得分:0)

这里有三个问题:

  1. from flask_cors import CORS app = Flask(__name__) CORS(app) 应该是money,因此您可以添加它。
  2. 您实际上并未将Int更新为新值。
  3. 除了money
  4. 之外,您还需要更新标签

    看看下面的变化;每条评论都解释了为什么需要进行变更:

    money