我试图使用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的文字时,就会发生这种情况。任何解决方案?
答案 0 :(得分:1)
隐藏该标签并尝试以编程方式创建新标签,更新分数的新标签。让我知道它是否适合你,它曾经发生在我身上。