NinJump喜欢游戏Swift(分数更新问题)

时间:2015-03-30 11:32:17

标签: ios swift uikit nstimer

我试图使用Swift UIKit创建类似游戏的Ninjump。一切都很好,直到我添加分数标签。这实际上很奇怪,我无法弄清楚它为什么会发生。
所以我有一个敌人在定时器更新时将15px的电影放下。和一个忍者,触摸屏幕时从左向右移动。当敌人移出屏幕时,分数会更新。发生的事情是,当敌人离开屏幕时,得分正在更新为1 ... 2..3。但是每当得分更新时,如果在右边,Ninja会自动向左移动。我不知道为什么会这样。每当一个敌人走出屏幕时,它就会发生。这是我的代码

import UIKit

class GameViewController: UIViewController {

    @IBOutlet weak var Ninja: UIImageView!
    var score = 0
    @IBOutlet weak var scoreLabel: UILabel!
    var startGame = NSTimer()

    override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
        self.updateNinja()
    }

    var enemyImage = UIImageView(frame: CGRectMake(32, -300, 100, 100))

    override func viewDidLoad() {
        super.viewDidLoad()

        self.scoreLabel.text = "0"
        enemyImage.image = UIImage(named: "enemy")
        self.view.addSubview(self.enemyImage)

    }

    override func viewDidAppear(animated: Bool) {
        startGame = NSTimer.scheduledTimerWithTimeInterval(0.01, target: self, selector: Selector("update"), userInfo: nil, repeats: true)
    }




    func update() {

        if CGRectIntersectsRect(self.Ninja.frame, self.enemyImage.frame) {
            println("Game Over")
        }

        // show the enemy again and again
        if self.enemyImage.frame.origin.y > self.view.frame.height {
            self.enemyImage.frame.origin.y = -100
            score++ // THIS IS THE PROBLEM
            self.scoreLabel.text = "\(score)"

        }

        // move the enemy image downwards
        enemyImage.frame.origin.y += 15

    }




    var isLeft:Bool = false // check where is the ninja left/right

    func updateNinja() {

        if isLeft {
            isLeft = false
            UIView.animateWithDuration(0.3, animations: { () -> Void in
                self.Ninja.frame.origin.x = 32
             })

        } else {
            isLeft = true
            UIView.animateWithDuration(0.3, animations: { () -> Void in
                self.Ninja.frame.origin.x = self.rightBar.frame.origin.x - 50
                }) 
        }

      }

}

当我删除得分++ 时,它更加奇怪。

更新:当我尝试更新scoreLabel的文字时,就会发生这种情况。任何解决方案?

1 个答案:

答案 0 :(得分:1)

隐藏该标签并尝试以编程方式创建新标签,更新分数的新标签。让我知道它是否适合你,它曾经发生在我身上。